Rumah > Java > javaTutorial > Bagaimana untuk Mengelakkan Gelung Infinite Semasa Mengendalikan InputMismatchException di Java?

Bagaimana untuk Mengelakkan Gelung Infinite Semasa Mengendalikan InputMismatchException di Java?

Linda Hamilton
Lepaskan: 2024-12-08 06:56:11
asal
1017 orang telah melayarinya

How to Avoid Infinite Loops When Handling InputMismatchException in Java?

cuba/tangkap dengan InputMismatchException: Menghapuskan Gelung Infinite

Masalah Yang Dihadapi

Dalam atur cara yang membaca input integer daripada pengguna, menggunakan percubaan/ menangkap blok untuk mengendalikan entri tidak sah, gelung tak terhingga berlaku apabila an InputMismatchException dilemparkan (cth., apabila pengguna memasukkan aksara bukan integer).

Punca Gelung Infinite

Gelung tak terhingga disebabkan oleh dua isu:

  1. Pembersihan Input Tiada: Apabila InputMismatchException adalah dibuang, token yang dimasukkan tidak digunakan daripada aliran input. Ia kekal dalam strim, menyebabkan percubaan baca berikutnya berulang kali membuang pengecualian.
  2. Pengendalian Pengecualian Umum: Blok tangkapan percubaan/tangkapan pada masa ini ditetapkan untuk menangkap (Pengecualian e). Pengendalian luas ini merangkumi semua pengecualian, yang tidak cukup khusus untuk InputMismatchException yang perlu kami tangani.

Penyelesaian

Untuk membetulkan gelung tak terhingga dan memastikan pengendalian InputMismatchException yang betul, beberapa langkah boleh diambil:

  1. Consume the Erroneous Input: Selepas menangkap InputMismatchException, gunakan secara eksplisit token input untuk mengelakkannya daripada menyebabkan pengecualian berulang. Ini boleh dilakukan dengan memanggil input.next(); dalam blok tangkapan.
  2. Gunakan Pengendalian Pengecualian Khusus: Gantikan tangkapan (Exception e) dengan tangkapan (InputMismatchException e) untuk mengendalikan InputMismatchExceptions sahaja secara khusus.
  3. Laksanakan Pengesahan: Selain itu, adalah dinasihatkan untuk menggunakan kaedah scanner.hasNextInt() untuk mengesahkan sama ada input ialah integer sebelum cuba membacanya. Ini boleh membantu mengelakkan pengecualian sama sekali.

Berikut ialah kod yang diubah suai dengan penambahbaikan yang dicadangkan:

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(); // Consume the erroneous input
            }
        } while (bError);

        System.out.printf("%d/%d = %d",n1,n2, nQuotient);
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Gelung Infinite Semasa Mengendalikan InputMismatchException di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan