Heim > Java > javaLernprogramm > Warum verursacht ein Try-Catch-Block mit InputMismatchException eine Endlosschleife in Java?

Warum verursacht ein Try-Catch-Block mit InputMismatchException eine Endlosschleife in Java?

Barbara Streisand
Freigeben: 2024-12-06 21:00:30
Original
283 Leute haben es durchsucht

Why Does a Try-Catch Block with InputMismatchException Cause an Infinite Loop in Java?

Try/Catch-Block mit InputMismatchException, der eine Endlosschleife verursacht

In einem Java-Programm, das ganzzahlige Eingaben vom Benutzer akzeptieren soll, ein Try/Catch Der Block wird verwendet, um ungültige Eingaben zu verarbeiten. Der folgende Code stößt jedoch auf eine Endlosschleife, wenn der Benutzer einen nicht ganzzahligen Wert eingibt, insbesondere InputMismatchException.

import java.util.InputMismatchException;
import java.util.Scanner;

public class Except {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean bError = true;
        int n1 = 0, n2 = 0, nQuotient = 0;

        do {
            try {
                System.out.println("Enter first num: ");
                n1 = input.nextInt();
                System.out.println("Enter second num: ");
                n2 = input.nextInt();
                nQuotient = n1 / n2;
                bError = false;
            } catch (Exception e) {
                System.out.println("Error!");
            }
        } while (bError);

        System.out.printf("%d/%d = %d", n1, n2, nQuotient);
    }
}
Nach dem Login kopieren

Um zu verstehen, warum dies geschieht, ist es wichtig, das Verhalten der Scanner-Klasse zu untersuchen, wenn eine InputMismatchException auftritt . Nach dem Auslösen der Ausnahme verwirft der Scanner die ungültige Eingabe nicht. Stattdessen verbleibt es im Eingabestream und verursacht möglicherweise eine Endlosschleife innerhalb des try/catch-Blocks.

Die Lösung besteht darin, input.next() explizit innerhalb des Catch-Blocks aufzurufen, um das ungültige Token zu verwerfen. Darüber hinaus wird empfohlen, hasNextInt() zu verwenden, um zu prüfen, ob eine gültige Ganzzahl verfügbar ist, bevor die Eingabe akzeptiert wird.

Der korrigierte Code unten folgt diesen Empfehlungen:

import java.util.InputMismatchException;
import java.util.Scanner;

public class Except {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        boolean bError = true;
        int n1 = 0, n2 = 0, nQuotient = 0;

        do {
            try {
                System.out.println("Enter first num: ");
                n1 = input.nextInt();
                System.out.println("Enter second num: ");
                n2 = input.nextInt();
                nQuotient = n1 / n2;
                bError = false;
            } catch (InputMismatchException e) {
                System.out.println("Error!");
                input.next(); // Discard the invalid token
            }
        } while (bError);

        System.out.printf("%d/%d = %d", n1, n2, nQuotient);
    }
}
Nach dem Login kopieren

Durch die Einbeziehung dieser Änderungen wird die Der try/catch-Block behandelt InputMismatchException effektiv und stellt sicher, dass das Programm nicht in eine Endlosschleife gerät, wenn der Benutzer ungültige Eingaben eingibt.

Das obige ist der detaillierte Inhalt vonWarum verursacht ein Try-Catch-Block mit InputMismatchException eine Endlosschleife in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage