Endlosschleife im Try/Catch-Block mit InputMismatchException: Eine Lösung
Ihr Java-Programm stößt bei der Behandlung einer InputMismatchException in einem Try auf eine Endlosschleife /catch-Block, während ganzzahlige Eingaben vom Benutzer entgegengenommen werden. Dieses Verhalten ist auf die Tatsache zurückzuführen, dass der Scanner nach dem Abfangen der InputMismatchException in einem ungültigen Zustand verbleibt, was dazu führt, dass die Schleife auf unbestimmte Zeit wiederholt wird.
Um dieses Problem zu beheben, müssen Sie die folgenden Vorgänge innerhalb des Catch-Blocks ausführen :
catch (InputMismatchException e) { System.out.println("Error!"); input.next(); // Move to the next line to avoid the infinite loop }
Die Methode input.next() setzt den Scannerzeiger auf die nächste Zeile und verwirft so effektiv alle ungültigen Eingaben, die die Ausnahme verursacht haben.
Alternativ können Sie zuvor die Methode hasNextInt() verwenden Es wird versucht, eine Ganzzahl zu lesen, um sicherzustellen, dass der gelesene Wert tatsächlich eine Ganzzahl ist. Dieser Ansatz macht die Ausnahmebehandlung vollständig überflüssig:
while (true) { if (input.hasNextInt()) { n1 = input.nextInt(); break; } else { input.next(); // Skip non-numeric input } }
Denken Sie daran, dass in der Java-Scanner-Dokumentation angegeben ist, dass der Scanner nach dem Auslösen einer InputMismatchException das für die Ausnahme verantwortliche Token nicht weitergibt, sodass es abgerufen oder auf andere Weise umgangen werden muss. Durch die Implementierung dieser Änderungen sollte das Endlosschleifenproblem in Ihrem Java-Programm behoben werden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3