2013-12-18 3 views
5

Я продолжаю получать ошибку, if без else.оператор break в «if else» - java

Я попытался 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 
    } 

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

+22

Java не является Python. Вы не можете ожидать, что две строки будут в одном блоке только потому, что у них одинаковый отступ ... – Sinkingpoint

+0

Я вижу xD спасибо! – John

+0

Даже это не решит проблему полностью.Все операторы 'if' должны быть связаны с' else'. –

ответ

11

Потому что ваш 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), что делает его легко выйти из цикла. Другой подход - использовать разрыв с метками.

+0

Вы хотите сделать заметку о том, как выйти из цикла, поскольку «break;» в коммутаторе выйдет только из коммутатора. – clcto

+0

Yikes - хорошая точка. редактирование –

5

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

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

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

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

Кроме того, как Фарс заявил, что было бы лучше использовать else if для всех условий вместо if, потому что если choice==1, он все равно пройдет проверку и проверьте, не будет ли choice==5, и он все равно войдет в ваш блок.

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; 
     // ... 
    } 
} 
10

Команда «break» не работает в инструкции «if».

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

«Разрыв» предназначен для использования внутри шлейфов (для, в то время как до и после, расширен и для переключения).

+0

простой, лаконичный – sirvon

+0

Это неправильный ответ. Команда break внутри оператора IF выйдет из цикла FOR. – Erez

+1

Команда «break» не работает в выражении «if», если оператор if не находится в цикле/переключателе структуры управления. Я думаю, что это путаница? Если его легче понять, представьте, используя оператор «continue» в выражении if. – djangofan

Смежные вопросы