3
對於學校中的項目,我試圖使用try/catch來防止程序在用戶輸入字母而不是所需的輸入類型時崩潰(即,雙)。在使用Try/Catch時,Java陷入死循環
public static double inputSide() {
Scanner in = new Scanner(System.in);
double side = -1;
do {
try {
System.out.println("Enter a side length (in units):");
side = in.nextDouble();
}
catch(InputMismatchException e){
System.out.println("Must input number");
}
} while (side < 0);
return side;
}
當我執行該代碼時,它會停留在一個循環,它輸出「輸入一個邊長(在單位):」和「必須輸入數字」無限。我是使用try/catch的新手,所以我可能只是不熟悉這種行爲。無論如何,如果有人能幫我弄清楚這個問題,那將非常感激。提前致謝。
非常感謝!我們正在研究in.hasNextDouble()方法。 – 2013-04-06 18:54:58
@ClementHoang不客氣!看看[java.util.Scanner API](http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html),你會看到有一個每個數據類型都有很多'Scanner#hasNextWhatever()',所以你不需要try-catch塊。我不記得如果你的輸入是錯誤的,它是否也需要無緩衝區,如果它經歷了一個無限循環,它和try-catch一樣是個問題,你用我的答案解決它!如果這對你最好,請點擊答案左邊的「V」符號來「打勾」。:) – BackSlash 2013-04-06 18:59:30
對於其他人閱讀。發生這種情況是因爲當調用異常時,掃描器不會移動到下一個輸入標記,而是嘗試再次讀取它。添加非數據類型特定的.next()移到下一個標記。 – 2016-03-05 03:24:25