Scanner在異常處理中的陷阱

Scanner sc = new Scanner(System.in);

while (true) {
System.out.println("請輸入一個1-100之間的數:");
try {
int guessNumber = sc.nextInt();
if (guessNumber > number) {
System.out.println("你猜的數據" + guessNumber + "大了");
} else if (guessNumber < number) {
System.out.println("你猜的數據" + guessNumber + "小了");
} else {
System.out.println("恭喜你猜中了");
break;
}
} catch (InputMismatchException e) {
System.out.println("你輸入的數據有誤");

}

當拋出異常後,就會出現死循環,不斷執行catch中的語句。如何解決呢?看下面的解決方法。



Scanner sc = new Scanner(System.in);

while (true) {
System.out.println("請輸入一個1-100之間的數:");
try {
int guessNumber = sc.nextInt();
if (guessNumber > number) {
System.out.println("你猜的數據" + guessNumber + "大了");
} else if (guessNumber < number) {
System.out.println("你猜的數據" + guessNumber + "小了");
} else {
System.out.println("恭喜你猜中了");
break;
}
} catch (InputMismatchException e) {
System.out.println("你輸入的數據有誤");
// 重新創建一個Scanner
sc = new Scanner(System.in);
}

在catch中重新創建Scanner的對象,避免出現死循環。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章