2016-08-22 9 views
-1

Ich schreibe eine Methode, die einen ganzzahligen Wert zurückgibt. In der Methode fordere ich den Benutzer für die Ganzzahl über die Konsole durch die Scanner-Klasse.Warum verursacht meine Ausnahmebehandlung eine Endlosschleife?

Da ich die Scannermethode "scan.nextInt()" verwende, suche ich auch nach "InputMismatchException" -Fehler. Ich habe die Ausnahmebehandlung in eine Schleife gestellt, so dass der Benutzer benachrichtigt wird, wenn die Ausnahme abgefangen wird und die Schleife wiederholt wird. Dies erfordert, dass der Benutzer so lange Werte eingibt, bis nur noch ein ganzzahliger Wert eingegeben wird.

Mein Problem ist jedoch nach dem ersten Mal auf den Fehler überprüft, wenn es zurückläuft, etwas passiert und der Benutzer nicht aufgefordert wird, einen neuen Wert einzugeben und die Ausnahme erneut ausgelöst wird. Dies führt natürlich zu einer Endlosschleife.

Ich habe recherchiert und ein paar Fälle gefunden, die mit dem Problem zusammenhängen, und ich habe versucht, entsprechende Korrekturen durchzuführen, aber nichts, was ich tue, scheint zu funktionieren und ich verstehe nicht, was genau passiert. Wird der Try-Block übersprungen? Stimmt etwas mit meiner Schreibweise für den try-Block nicht?

public static int inputCheck() { 
int check=0; 
int money = 0; 
while (check==0) { 
    boolean error = false; 
    System.out.println("Please enter the amount of money your player has."); 
    while (true) { 
    try { 
     money = scan.nextInt(); 
    }catch (InputMismatchException wrongInput) { 
     System.out.println("Error. Please enter an integer value." + wrongInput); 
     error = true; 
    } 
    break; 
    } 
    if (error==false) 
    check++; 
    } 
return money; 
} 

EDIT-Code wurde geändert und der „Fehler“ boolean Wert hat

+1

Warum haben Sie zwei verschachtelte Schleifen? –

+0

Verwenden Sie 'if (! Error)' anstatt auf Gleichheit zu prüfen. – ChiefTwoPencils

+0

Haben Sie versucht, mit einem Debugger durchzulaufen? – bradimus

Antwort

-1

while(true) nie falsch ist, so dass die Schleife endet nie eingestellt worden ist, wenn es nicht die break Aussage anstößt

+0

Es gibt eine Pause direkt nach der Schleife, aber ich habe diese While-Schleife aus Gründen der Einfachheit entfernt. – MaydenCompe

0

Das Problem liegt in Ihrem Fang, wenn Sie den Fehler gleich true setzen. Sobald der Fehler auf "true" gesetzt ist, wird Ihre Schleife so konstruiert, dass sie nicht mehr beendet werden kann, da der Fehler nie auf "false" gesetzt ist. Daher wird die Prüfung niemals erhöht. Ich würde dieses System im Allgemeinen neu strukturieren, es gibt viel bessere Ansätze, dies zu handhaben.

+0

Okay, ich habe dies behoben, obwohl dies eine potentielle Endlosschleife behebt, scheint mein try-Block immer noch übersprungen zu werden, da er den Benutzer nicht nach einem anderen Wert fragt. – MaydenCompe

0

Versuchen mit diesem:

public static int inputCheck() { 
    int check = 0; 
    int money = 0; 

    while (check == 0) { 
     boolean error = false; 
     System.out.println("Please enter the amount of money your player has."); 
     try { 
      money = Integer.parseInt(scan.next()); 
     } catch (Exception e) { 
      System.out.println("Error. Please enter an integer value." + e); 
      error = true; 
     } 
     if (error == false) { 
      check++; 
     } 
    } 
    return money; 
} 
Verwandte Themen