我的代碼快完成了。這是一個猜數字游戲。最后一部分是實作 try-catch 函式,以便程式捕獲無效輸入,如數字 > 50 或鍵入字母或任何符號。
這是代碼:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
//number generator
int number = 1 (int)(50 * Math.random());
int i, guess;
int g = 50;
for (i = 0; i < g; i ) {
try {
System.out.println("Guess a number between 1 to 50!");
guess = s.nextInt();
if (guess == number) {
System.out.println("You got it in " i " tries.");
System.out.println("The number was: " number);
break;
} else if (guess < number) {
System.out.println("Too low. Try Again.");
} else if (guess > number) {
System.out.println("Too high. Try Again.");
}
} catch (Exception e) {
System.out.println("Oops you entered an invalid input. Try Again.");
}
}
}
}
uj5u.com熱心網友回復:
所以我們不要談論干凈的代碼,我只是想更正你的catch子句。
.nextInt()主要問題是,如果它是無效輸入,掃描器不會消耗它。
這意味著在捕獲您的例外之后,該行仍然存在,并且將在您的下一次迭代中自動再次讀取。從理論上講,這將以無限回圈結束,但由于您的結構,您的回圈受限于int g = 50;.
我知道的唯一(而且不是那么干凈)的解決方案是,讓掃描儀簡單地使用.nextLine()or消耗下一行.next()。
@Chaosfire提到的解決方案要好得多。
guess = Integer.parseInt(s.nextLine());
您將首先閱讀該行,無論其內容是什么。之后,您嘗試將內容決議為整數。如果輸入無效,該方法將拋出一個NumberFormatException, 您在 catch 子句中捕獲。
回圈建議
for(i = 0; i < g; i ) {
System.out.println("Guess a number between 1 to 50!");
try {
guess = Integer.parseInt(s.nextLine());
if((guess < 1) || (guess > 50)) {
throw new Exception("Integer is not in Range between 1 and 50");
}
if(guess == number) {
System.out.println("You got it in " i " tries.");
System.out.println("The number was: " number);
break;
}
else if(guess < number) {
System.out.println("Too low. Try Again.");
}
else if(guess > number) {
System.out.println("Too high. Try Again.");
}
}
catch(Exception e) {
i--;
System.out.println("Oops you entered an invalid input: " e.getMessage() "\nTry Again.");
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/454104.html
