web-dev-qa-db-ja.com

「if else」のbreakステートメント-java

ifなしでelseというエラーが発生し続けます。

私は試した else if 同様に

for (;;){
        System.out.println("---> Your choice: ");
        choice = input.nextInt();
        if (choice==1)
            playGame();
        if (choice==2)
            loadGame();
        if (choice==3)
            options();
        if (choice==4)
            credits();
        if (choice==5)
            System.out.println("End of Game\n Thank you for playing with us!");
            break;
        else
            System.out.println("Not a valid choice!\n Please try again...\n");=[;'mm
    }

また、このコードを提示する方法についてより良いアイデアを持っている場合は、ifしないでください:)

9
John

elseは何にも接続されていないためです。中括弧なしのifは、直後の単一のステートメントのみを包含します。

_if (choice==5)
{
    System.out.println("End of Game\n Thank you for playing with us!");
    break;
}
else
{
   System.out.println("Not a valid choice!\n Please try again...\n");
}
_

中括弧を使用しないことは、発生した正確な問題につながる可能性があるため、一般的に悪い習慣と見なされます。

さらに、ここでswitchを使用するとより意味があります。

_int choice;
boolean keepGoing = true;
while(keepGoing)
{
    System.out.println("---> Your choice: ");
    choice = input.nextInt();
    switch(choice)
    {
        case 1: 
            playGame();
            break;
        case 2: 
            loadGame();
            break;
        // your other cases
        // ...
        case 5: 
            System.out.println("End of Game\n Thank you for playing with us!");
            keepGoing = false;
            break;
        default:
            System.out.println("Not a valid choice!\n Please try again...\n");
     }
 }         
_

無限のforループの代わりにwhile(boolean)を使用して、ループを簡単に終了できることに注意してください。別のアプローチは、ラベル付きのブレークを使用することです。

13
Brian Roach

「break」コマンドは、「if」ステートメント内では機能しません。

コードから「break」コマンドを削除してからコードをテストすると、「break」コマンドがなくてもコードはまったく同じように動作することがわかります。

「Break」は、ループ内(for、while、do-while、Enhanced forおよびswitch)で使用するために設計されています。

13

問題は、{}を使用せずにifに複数のステートメントを入れようとしていることです。あなたが現在持っているものは次のように解釈されます:

if( choice==5 )
{
    System.out.println( ... );
}
break;
else
{
    //...
}

あなたは本当に欲しい:

if( choice==5 )
{
    System.out.println( ... );
    break;
}
else
{
    //...
}

また、Farceが述べたように、すべての条件にifの代わりにelse ifを使用することをお勧めします。なぜなら、choice==1の場合、choice==5 、これは失敗し、それでもelseブロックに入ります。

if( choice==1 )
    //...
else if( choice==2 )
    //...
else if( choice==3 )
    //...
else if( choice==4 )
    //...
else if( choice==5 )
{
    //...
}
else
    //...

よりエレガントなソリューションは、switchステートメントを使用することです。ただし、breakは、ラベルを使用しない限り、最も内側の「ブロック」からのみブレークします。したがって、ループがラベル付けされ、ケースが5の場合はループを中断する必要があります。

LOOP:
for(;;)
{
    System.out.println("---> Your choice: ");
    choice = input.nextInt();
    switch( choice )
    {
        case 1:
            playGame();
            break;
        case 2:
            loadGame();
            break;
        case 2:
            options();
            break;
        case 4:
            credits();
            break;
        case 5:
            System.out.println("End of Game\n Thank you for playing with us!");
            break LOOP;
        default:
            System.out.println( ... );
    }
}

ループにラベルを付ける代わりに、フラグを使用してループに停止するよう指示することもできます。

bool finished = false;
while( !finished )
{
    switch( choice )
    {
        // ...
        case 5:
            System.out.println( ... )
            finished = true;
            break;
        // ...
    }
}
6
clcto