2013-12-18 11 views
5

Ich bekomme immer einen Fehler, if ohne else.break-Anweisung in "wenn sonst" - Java

Ich versuchte else if auch

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 
    } 

auch, wenn Sie eine bessere Idee haben, wie Sie diesen Code zu präsentieren, zögern Sie bitte nicht :)

+22

Java ist nicht Python. Du kannst nicht erwarten, dass zwei Zeilen im gleichen Block sind, nur weil sie die gleiche Einrückung haben ... – Sinkingpoint

+0

Ich sehe xD danke! – John

+0

Auch das wird das Problem nicht vollständig lösen.Alle 'if'-Anweisungen müssen mit' else' verbunden sein. –

Antwort

11

Weil Ihr else ist an nichts gebunden. Die if ohne Klammern umfasst nur die einzelne Anweisung, die unmittelbar darauf folgt.

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"); 
} 

Nicht Klammern verwendet, wird im Allgemeinen als eine schlechte Praxis betrachtet, weil es Ihnen begegnet auf die genauen Problemen führen kann.

Darüber hinaus wäre die Verwendung eines switch hier sinnvoller.

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"); 
    } 
}   

Beachten Sie, dass statt einer unendlichen Schleife for ich eine while(boolean) verwendet wird, macht es einfach, die Schleife zu verlassen. Ein anderer Ansatz wäre die Verwendung von break with labels.

+0

Sie möchten eine Notiz machen, wie Sie aus der Schleife als "break;" in einem Schalter ausbrechen nur aus dem Schalter ausbrechen. – clcto

+0

Huch - guter Punkt. Bearbeiten –

5

Das Problem ist, dass Sie mehrere Anweisungen haben, versuchen, in einem if ohne {} zu verwenden. Was Sie gerade wie interpretiert haben:

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

Sie wollen wirklich:

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

Auch als Farce festgestellt hat, wäre es besser, else if die Bedingungen für alle zu verwenden, anstatt if denn wenn choice==1, es wird immer noch durchlaufen und prüfen, ob , die fehlschlagen würde, und es wird immer noch in Ihrem else Block gehen.

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

Eine elegantere Lösung wäre eine switch Aussage werden. break bricht jedoch nur vom innersten "Block" ab, wenn Sie keine Labels verwenden. So möchten Sie Ihre Schleife beschriften und brechen aus, dass, wenn der Fall 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(...); 
    } 
} 

Statt die Schleife der Beschriftung, könnten Sie auch einen Flag verwenden, um die Schleife zu sagen, zu stoppen.

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

Der Befehl "break" funktioniert nicht innerhalb einer "if" -Anweisung.

Wenn Sie den "break" -Befehl aus Ihrem Code entfernen und dann den Code testen, sollten Sie feststellen, dass der Code genauso funktioniert, ohne einen "break" -Befehl wie bei einem.

"Break" ist für den Einsatz innerhalb von Loops (für, while, do-while, enhanced für und switch) konzipiert.

+0

einfach, übersichtlich – sirvon

+0

Das ist falsche Antwort. Der Befehl break in der IF-Anweisung beendet die FOR-Schleife. – Erez

+1

Der 'break'-Befehl funktioniert nicht innerhalb einer' if'-Anweisung, wenn diese if-Anweisung nicht innerhalb einer Kontrollstruktur-Schleife/-Schalter liegt. Ich denke, da ist die Verwirrung? Wenn es einfacher ist zu ranken, stellen Sie sich vor, Sie verwenden eine 'continue'-Anweisung in einer if-Anweisung. – djangofan