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
Warum haben Sie zwei verschachtelte Schleifen? –
Verwenden Sie 'if (! Error)' anstatt auf Gleichheit zu prüfen. – ChiefTwoPencils
Haben Sie versucht, mit einem Debugger durchzulaufen? – bradimus