Rumah >Java >javaTutorial >Mengapakah Try-Catch Block dengan InputMismatchException Menyebabkan Gelung Infinite di Java?

Mengapakah Try-Catch Block dengan InputMismatchException Menyebabkan Gelung Infinite di Java?

Barbara Streisand
Barbara Streisandasal
2024-12-06 21:00:30306semak imbas

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

cuba/tangkap Blok dengan InputMismatchException Menyebabkan Gelung Infinite

Dalam program Java yang direka untuk menerima input integer daripada pengguna, cuba/tangkap blok digunakan untuk mengendalikan input yang tidak sah. Walau bagaimanapun, kod di bawah menghadapi gelung tak terhingga apabila pengguna memasukkan nilai bukan integer, khususnya 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);
    }
}

Untuk memahami sebab ini berlaku, adalah penting untuk memeriksa gelagat kelas Pengimbas apabila menghadapi InputMismatchException . Selepas membuang pengecualian, Pengimbas tidak membuang input yang tidak sah. Sebaliknya, ia kekal dalam aliran input, yang berpotensi menyebabkan gelung tak terhingga dalam blok cuba/tangkap.

Penyelesaian terletak pada memanggil input.next() secara eksplisit dalam blok tangkapan untuk membuang token tidak sah. Selain itu, adalah disyorkan untuk menggunakan hasNextInt() untuk menyemak sama ada integer yang sah tersedia sebelum menerima input.

Kod yang diperbetulkan di bawah mengikut pengesyoran ini:

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);
    }
}

Dengan memasukkan pengubahsuaian ini, blok cuba/tangkap dengan berkesan mengendalikan InputMismatchException, memastikan program tidak memasuki gelung tak terhingga apabila pengguna memasukkan input tidak sah.

Atas ialah kandungan terperinci Mengapakah Try-Catch Block dengan InputMismatchException Menyebabkan Gelung Infinite di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn