Rumah >Java >javaTutorial >Mengapakah Try-Catch Block dengan InputMismatchException Menyebabkan Gelung Infinite di 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!