首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 異常處理中 Scanner 重複輸入導致死循環問題解析

     編輯:程式設計綜合問答

問題代碼

try {
    num1 = input.nextInt();
} catch (Exception ex) {
    System.out.println("輸入錯誤,請重新輸入");
    input.nextInt(); // 錯誤:再次調用 nextInt() 仍讀取緩衝區中無效數據
}

核心原因

Scanner.nextInt() 遇到非整數輸入(如字母 'e')時拋出 InputMismatchException,但不會消費該無效 token,導致緩衝區仍殘留 'e'。catch 塊中再次調用 nextInt() 會再次讀取同一無效數據,陷入無限異常循環。

解決方案

  1. 消費無效 token:catch 塊中先調用 input.next() 或 input.nextLine() 跳過錯誤輸入。
  2. 循環驗證:用 hasNextInt() 判斷後再讀取,避免異常開銷。

修正代碼示例

while (!input.hasNextInt()) {
    System.out.println("請輸入整數:");
    input.next(); // 跳過非整數 token
}
num1 = input.nextInt();

同理處理 num2。此寫法健壯且無異常性能損耗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved