Java中處理InputMismatchException時如何避免無限迴圈?
try/catch with InputMismatchException:消除無限循環
遇到的問題
在從使用者讀取整數輸入的程式中,利用try / catch 區塊來處理無效條目,當拋出InputMismatchException 時(例如,當使用者輸入非整數元符號)。
無限循環的原因
無限循環是由兩個問題引起的:
- 缺少輸入清理: 當拋出InputMismatchException 時,輸入的token 不會從輸入流中消耗。它保留在流中,導致後續讀取嘗試重複拋出異常。
- 一般異常處理: try/catch 的 catch 區塊目前設定為 catch(異常 e)。這種廣泛的處理包括所有異常,這對我們需要解決的 InputMismatchException 來說不夠具體。
解決方案
要修復無限循環並確保正確處理InputMismatchException,需要執行以下幾個步驟可以採取:
- 消耗錯誤輸入: 捕獲InputMismatchException 後,明確消耗輸入令牌以防止其導致重複異常。這可以透過呼叫 input.next(); 來完成在 catch 區塊內。
- 使用特定的例外處理: 將 catch (Exception e) 替換為 catch (InputMismatchException e) 以僅專門處理 InputMismatchException。
- 實作驗證:此外,建議使用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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
