0

コードは次のとおりです。

public static void main(String args[])
    {
        int i=0;
        int m=0;
        double scale;
        boolean exit;
        Shape[] s = new Shape[10];
        while(exit !=true)
        {
            System.out.print("\nChoose an option:\n"+
                    "1-Add a new circle\n"+
                    "2-Add a new rectangle\n"+
                    "3-Delete all shapes\n"+
                    "4-Scale all shapes\n"+
                    "5-Display perimeter of all shapes\n"+
                    "6-Display the area of all shapes\n"+
                    "7-Enter scale factor\n"+
                    "8-Exit program\n");

            Scanner input = new Scanner(System.in);
            m=input.nextInt();


            if(i<=9)
            {
                switch (m)
                {


                 case 1: Circle c = new Circle(0);
                         s[i]=c;
                         i++;
                         break;
                 case 2: Rectangle r = new Rectangle(1,1);
                         s[i]=r;
                         i++;
                         break;

                 case 3: s=null;
                         i=0;
                         break;
                 case 4: for(i=0; i<s.length; i++)
                         {
                             s[i].scaleShape();
                         }
                         break;
                 case 5: for(i=0; i<s.length; i++)
                         {
                            if(s[i] != null)
                            {   
                                System.out.println(s[i].getPerimeter());
                            }
                         }
                         break;
                 case 6: for(i=0; i<s.length; i++)
                         {
                            if(s[i] != null)
                            {
                                System.out.println(s[i].getArea());
                            }
                         }
                         break;
                 case 7: do
                         {
                            System.out.println("\nEnter scale factor");
                            scale=input.nextDouble();
                         }
                         while(scale<0);
                         Shape.setScaleFactor(scale);

                         }
                         break;

                 case 8: System.out.println("Do you want to quit?");
                         break; //Nothing here since loop should terminate it.



                 //default: System.out.println("Number must be 1-8");
                         // break;


              } 

         }
     }
   }

奇妙なことに、コンパイラはケース 8 で次のようなエラーを表示しています。

型の不一致により、int から boolean に変換できません。

しかし、私は何もブール値に変換していません

- トークン "case" アサートの構文エラーが予想される - トークンの構文エラー :, ; 期待される

しかし、そこにあるすべてのコマンドにはセミコロンがあります

式は値を返す必要があります

コンパイラの動作がおかしいのはなぜですか? 通常、そのようなエラーは簡単に見つけることができます。何が起こっている?

4

4 に答える 4

4

あなたの問題は7の場合です:

case 7: do
        {
             System.out.println("\nEnter scale factor");
             scale=input.nextDouble();
        }
        while(scale<0);
        Shape.setScaleFactor(scale);

        }

追加の右中括弧に注意してください。これは、switchステートメントを閉じて、. を孤立させますcase 8

于 2012-10-11T03:08:35.413 に答える
3
                     } // <-- Why is this here?
                     break;

             case 8: System.out.println("Do you want to quit?");

switch ステートメントを余分な で終了しています}。それを削除すると、問題が解決する場合があります。

于 2012-10-11T03:07:54.007 に答える
1

コードに余分な括弧があることを誰もが指摘していますが、それがどこから来たのかは指摘できませんでした...

while(scale<0); // <-- This isn't going to work....
    Shape.setScaleFactor(scale);
}

そのはず...

while(scale<0) {
    Shape.setScaleFactor(scale);
}

次の質問は、スケールがどのようにデクリメントされるかです。注意しないと、無限ループが発生する可能性があります。

于 2012-10-11T03:17:49.153 に答える
0
while(scale<0);
Shape.setScaleFactor(scale);

} // Remove this parenthesis.
break;
于 2012-10-11T03:14:01.597 に答える