提问人:nostradamus 提问时间:11/11/2023 更新时间:11/12/2023 访问量:52
捕获 InputMissMatchException 后继续 while 循环,Java
Continuing while loop after catching an InputMissMatchException, Java
问:
我是 Java 新手,在捕获异常后遇到了问题。捕获异常后,程序结束,但我想继续循环。该程序的用途是用户通过扫描仪输入 1 到 10 之间的数字,直到输入的数字等于之前定义的随机数。
public class GuessingGame {
public static void main(String[] args) {
System.out.println("Welcome!");
int min = 1;
int max = 1000;
int randomNumber = (int) (Math.random() * (max - min) + 1) + min;
Scanner scanner = new Scanner(System.in);
int firstDraw = 1;
int maxDraw = 1000;
try {
while (firstDraw < maxDraw) {
System.out.println("Please enter your guess: ");
int guessingNumber = scanner.nextInt();
if (guessingNumber < randomNumber) {
System.out.println("Too small!");
} else if (guessingNumber > randomNumber) {
System.out.println("Too big!");
} else {
System.out.println("You win");
}
firstDraw++;
}
} catch (InputMismatchException e){
System.out.println("Not a number - try again!");
}
}
}
我想问题是,我要把try-catch块放在哪里。我尝试了几种可能性,但我没有得到正确的解决方案。如果我只是输入数字,程序就会运行并结束,直到我猜出正确的数字。但是如果我使用字母而不是数字,它就会结束程序。我之前也看到过一些类似的问题,但我真的不明白
你帮助同伴:)
答:
1赞
淡淡薄荷丶微微凉
11/11/2023
#1
这可能是你想要的?
public static void main(String[] args) {
System.out.println("Welcome!");
int min = 1;
int max = 1000;
int randomNumber = (int) (Math.random() * (max - min) + 1) + min;
int firstDraw = 1;
int maxDraw = 1000;
while (firstDraw < maxDraw) {
System.out.println("Please enter your guess: ");
try {
Scanner scanner = new Scanner(System.in);
int guessingNumber = scanner.nextInt();
if (guessingNumber < randomNumber) {
System.out.println("Too small!");
} else if (guessingNumber > randomNumber) {
System.out.println("Too big!");
} else {
System.out.println("You win");
break;
}
firstDraw++;
} catch (InputMismatchException e){
System.out.println("Not a number - try again!");
}
}
}
评论
0赞
enzo
11/13/2023
虽然这个代码片段可能是解决方案,但包括一个解释确实有助于提高你的帖子的质量。请记住,您正在为将来的读者回答问题,而这些人可能不知道您的代码建议的原因。
0赞
nostradamus
11/15/2023
谢谢,我注意到我还必须将扫描仪的启动放在 try catch 块和 while 循环中
-1赞
Reilas
11/12/2023
#2
"...捕获异常后,程序结束,但我想继续循环。..."
使用 Scanner#next 和 Integer#parseInt 方法。
并且,将 try-catch 放在循环中。
此外,当猜到正确的值时,中断循环。
请注意,parseInt 方法引发的是 NumberFormatException,而不是 InputMismatchException。
while (firstDraw < maxDraw) {
System.out.println("Please enter your guess: ");
try {
int guessingNumber = Integer.parseInt(scanner.next());
if (guessingNumber < randomNumber) {
System.out.println("Too small!");
} else if (guessingNumber > randomNumber) {
System.out.println("Too big!");
} else {
System.out.println("You win");
break;
}
firstDraw++;
} catch (NumberFormatException e){
System.out.println("Not a number - try again!");
}
}
输出
Welcome!
Please enter your guess:
abc
Not a number - try again!
Please enter your guess:
123
Too small!
Please enter your guess:
456
Too big!
Please enter your guess:
241
You win
最后,您可以使用 RandomGenerator#nextInt 方法来指定边界。
int randomNumber = new Random().nextInt(min, max + 1);
评论
0赞
nostradamus
11/15/2023
谢谢,帮了我很多
0赞
Oskar Ray-Frayssinet
11/12/2023
#3
我理解你的问题:
评论
try-catch-block
while-block
Random.nextInt(1000)+1