инструкция break в "if else" - 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 Gamen Thank you for playing with us!");
            break;
        else
            System.out.println("Not a valid choice!n Please try again...n");=[;'mm
    }

кроме того, если у вас есть лучшее представление о том, как представить этот код, Пожалуйста, не стесняйтесь :)

3 ответов


потому что else ни к чему не привязан. The 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 loop я использовал while(boolean), что упрощает выход из цикла. Другим подходом было бы использование break with labels.


команда "break "не работает в операторе" if".

Если вы удалите команду " break "из своего кода, а затем протестируете код, вы должны обнаружить, что код работает точно так же без команды" break", как с одним.

"перерыв" предназначен для использования внутри петель (Для, в то время как, do-while, enhanced for и switch).


проблема в том, что вы пытаетесь иметь несколько заявлений в if без использования {}. То, что у вас в настоящее время интерпретируется как:

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

вы действительно хотите:

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

кроме того, как заявил фарс, было бы лучше использовать else if для всех условий вместо 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;
        // ...
    }
}