首頁 >Java >java教程 >Java中處理InputMismatchException時如何避免無限迴圈?

Java中處理InputMismatchException時如何避免無限迴圈?

Linda Hamilton
Linda Hamilton原創
2024-12-08 06:56:111040瀏覽

How to Avoid Infinite Loops When Handling InputMismatchException in Java?

try/catch with InputMismatchException:消除無限循環

遇到的問題

在從使用者讀取整數輸入的程式中,利用try / catch 區塊來處理無效條目,當拋出InputMismatchException 時(例如,當使用者輸入非整數元符號)。

無限循環的原因

無限循環是由兩個問題引起的:

  1. 缺少輸入清理: 當拋出InputMismatchException 時,輸入的token 不會從輸入流中消耗。它保留在流中,導致後續讀取嘗試重複拋出異常。
  2. 一般異常處理: try/catch 的 catch 區塊目前設定為 catch(異常 e)。這種廣泛的處理包括所有異常,這對我們需要解決的 InputMismatchException 來說不夠具體。

解決方案

要修復無限循環並確保正確處理InputMismatchException,需要執行以下幾個步驟可以採取:

  1. 消耗錯誤輸入: 捕獲InputMismatchException 後,明確消耗輸入令牌以防止其導致重複異常。這可以透過呼叫 input.next(); 來完成在 catch 區塊內。
  2. 使用特定的例外處理: 將 catch (Exception e) 替換為 catch (InputMismatchException e) 以僅專門處理 InputMismatchException。
  3. 實作驗證:此外,建議使用scanner.hasNextInt()方法來驗證是否在嘗試讀取之前,輸入是一個整數。這可以幫助完全避免異常。

以下是修改後的程式碼以及建議的改進:

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

以上是Java中處理InputMismatchException時如何避免無限迴圈?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn