2016-06-14 19 views
0
int choice = 0; 

    while ((choice != 1) || (choice !=2)){ 

     System.out.println("1. Option 1"); 
     System.out.println("2. Option 2"); 

     try{ 

     choice = scanner.nextInt(); 

     } 

     catch(InputMismatchException e){ 
      System.out.println(e); 
     } 

     if (choice == 1){ 
      System.out.println("Option 1"); 
      break; 
     } 

     if (choice == 2){ 
      System.out.println("Option 2"); 
      break; 
     } 

     System.out.println("Please enter a valid choice."); 

    } 

Ich versuche, den Fall zu behandeln, in dem ein Nicht-Int eingegeben wird. Warum dreht sich das in eine Endlosschleife? Es hat gut funktioniert, bevor ich versucht habe, den try catch-Block hinzuzufügen.Java-Fehlerbehandlung verursacht Endlosschleife

+0

Aber dann das Programm beendet ist, ich es in einer Schleife zurück wollen, so dass Sie in einen anderen Wert eingeben. – unskilledidiot

+1

Sie müssen das Newline-Token konsumieren. Siehe http://stackoverflow.com/questions/13102045/skipping-nextline-after-using-next-nextint-or-other-nextfoo-methods. –

Antwort

0

Natürlich wird es, weil Sie den Fehler innerhalb der While-Schleife abfangen und keine Bedingung setzen, um die Schleife zu beenden, wenn der Fehler gefangen wird, so dass Sie nie beenden werden.

Fügen Sie der While-Schleife entweder eine weitere Bedingung hinzu, um bei einem Fehler zu beenden, oder setzen Sie die Auswahl auf 1 oder 2, wenn ein Fehler auftritt, oder brechen Sie, wenn ein Fehler erkannt wird.

int choice = 0; 

    while ((choice != 1) || (choice !=2)) { 
     System.out.println("1. Option 1"); 
     System.out.println("2. Option 2"); 

     try{ 
     choice = scanner.nextInt(); 
     } catch(InputMismatchException e) { 
     System.out.println(e); 
     } 
     switch(choice) { 
     case 1: 
     System.out.println("Option 1"); 
     break; 
     case 2: 
     System.out.println("Option 2"); 
     break; 
     default: 
     System.out.println("Please enter a valid choice."); 
     break; 
     } 
    } 
+0

Hallo, ich möchte es so machen, wenn der Fehler gefangen wird, geht es zurück zum Anfang der Schleife, so dass ein richtiger Wert eingegeben werden kann. Wie kann ich das machen? – unskilledidiot

+0

Sie müssen einen Fehler melden, der aufgetreten ist, und dann einen Fehler anzeigen, wenn ein Fehler festgestellt wurde, die Markierung löschen und neu beginnen. – SPlatten

0

ersetzen Sie versuchen fangen mit

try{ 
    choice = Integer.parseInt(scanner.next()); 

} catch(NumberFormatException e){ 
    System.out.println("Enter a valid choice"); 
} 
Verwandte Themen