我目前正在研究Eclipse中的一些Java代碼,並試圖在do-while語句中使用try-catch語句。我當前的代碼如下:Java Do while語句在Try Catch語句後無限循環
import java.util.Scanner;
import java.util.InputMismatchException;
import java.util.Random;
public class GG_HighLowInvalid{
public static void main(String[] args){
Scanner cg = new Scanner(System.in);
//Assign and define variables
int guess, rand;
guess = 0;
rand = 10;
//Create loop
do
try{
guess = 0;
//Ask for a guess
System.out.print("Enter your guess: ");
//Record the guess
guess = cg.nextInt();
}
catch(InputMismatchException exception){
System.out.println("Your guess must be an integer.");
}
while (guess != rand);
}
}
當我把在任何號碼,代碼工作正常,並會循環問另一個輸入和輸入10時,該代碼將停止,因爲它應該是(因爲猜測等於rand)。但是,如果我輸入的內容不是整數(例如「否」),則會在輸出打印以下內容時發生無限循環:
「您的猜測必須是整數。」
「輸入你的猜測:你的猜測必須是一個整數。」
「輸入你的猜測:你的猜測必須是一個整數。」
「輸入你的猜測:你的猜測必須是一個整數。」
永遠重複,直到程序外部終止。
由於while語句是(guess!= rand),爲什麼非整數會導致這個無限循環? try-statement下的手動輸入不應該再次被調用嗎?任何幫助理解這一點將不勝感激。另外,我對Java很新,所以如果我遇到簡單的問題,很抱歉。
您是否試過使用調試器來查看'guess'和'rand'的值,當它通過'while'條件評估時? – Anatoly
事實上,你輸入一個非整數並不影響'guess'是一個'int',無論如何,值爲'0'(或者你最近的猜測)。因此,如果以前持有'guess!= rand',它仍然成立。然而,真正的問題是'Scanner'對象在不詢問新的請求的情況下會一直讀取相同的輸入。這是通過@Task的回答解決的。 – Eusebius