我希望程序在捕获异常时重新执行 while 循环 - 异常正在接收文本输入。相反,它继续使用下面的代码进行一段时间循环,我希望它再次要求用户输入。
import java.util.InputMismatchException;
import java.util.Scanner;
public class NumberGuess {
public static void main(String[] args) {
Scanner Scanner = new Scanner(System.in);
int between = 100;
int secretNumber = (int)(Math.random()*between);
int inputNum = 0;
int guesses = 0;
System.out.println("Please enter your guess: ");
inputNum = Scanner.nextInt();
guesses++;
// #### Loop here ####
while (inputNum != secretNumber) {
// Try catch
try {
// number too high or too low
if (inputNum > 100 | inputNum < 0) {
System.out.println("Please enter a guess between 0 and " + between + ".");
inputNum = Scanner.nextInt();
}
// less than secretNumber
if (inputNum < secretNumber) {
System.out.println("Try higher");
inputNum = Scanner.nextInt();
guesses++;
}
// greater than secretNumber
if (inputNum > secretNumber) {
System.out.println("Try lower");
inputNum = Scanner.nextInt();
guesses++;
}
}
catch(InputMismatchException e){
System.out.println("Invalid Input");
}
}
System.out.println("\nWell done! The secret number was " + secretNumber + "." + "\nYou took " + guesses + " guesses.");
}
}
输出:
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
Invalid Input
Try higher
进行以下2项更改可以帮助您实现所需的功能。
1更改<代码> if(输入名称
如果输入非数字(如 a),则输入不匹配异常例外可以是 caugt。
Scanner.next()
以使其能够在控制台中重新输入数字。变化
// greater than secretNumber
if (inputNum > secretNumber) {
System.out.println("Try lower");
inputNum = Scanner.nextInt();
guesses++;
}
}
catch(InputMismatchException e){
System.out.println("Invalid Input");
}
到
// greater than secretNumber
if (inputNum > secretNumber) {
System.out.println("Try lower");
inputNum = Scanner.nextInt();
guesses++;
}
}
catch(InputMismatchException e){
System.out.println("Invalid Input");
Scanner.next();
}
随着上述变化,测试如下:
Please enter your guess:
60
Try higher
80
Try higher
90
Try lower
a
Invalid Input
Try lower
80
Try higher
85
Try lower
84
Try lower
83
Try lower
82
Try lower
81
Well done! The secret number was 81.
You took 9 guesses.
|
是逻辑运算符。使用条件||
if (inputNum > 100 || inputNum < 0) {
研究扫描仪
上的留档:
当扫描程序引发 InputMismatchException 时
,扫描程序将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该标记。
如果发现异常,则扫描程序将保留在尝试读取数字之前的位置。您必须在捕获块中使用 nextLine
推进它。
我试过这个:
我真的不知道这个问题。。。 如果数字不正确,块将捕获异常,当我输入-1或0时,它将捕获异常并要求我再次输入数字。。。但如果我键入类似asdasd的内容,它将运行一个无限循环。
所以我正在构建一个程序,从用户输入中获取int。我有一个非常简单的try/catch块,如果用户没有输入int,应该重复这个块,直到他们输入int为止。以下是代码的相关部分: 如果我为第二个整数输入一个0,那么try/catch完全按照它应该做的做,并让我再次输入它。但是,如果我有一个InputMismatchException,比如为其中一个数字输入5.5,它只是在一个无限循环中显示我的错误消息
我试图从用户那里获取输入,为2D矿山的weeper游戏构建网格,当我将有效值传递给扫描器时,过程非常顺利,但当我尝试无效的东西时,它会经历无限循环,即使try块是用资源尝试,它应该用每一个新的尝试关闭扫描器,当它无限地打印捕获上的字符串时,它听起来不会关闭它
嗨,我正在使用netbean来练习java异常,我想在用户未输入数字时捕获异常。 上述代码导致无限循环,并阻止用户输入变量< code>a的值。
问题内容: 因此,我正在构建一个从用户输入中获取整数的程序。我有一个看起来非常简单的try / catch块,如果用户不输入int,则应该重复该块直到他们这样做。这是代码的相关部分: 如果我为第二个整数输入0,那么try / catch会完全按照预期的方式运行,并让我再次放入。但是,如果我有一个InputMismatchException,例如为其中一个数字输入5.5,它只会在无限循环中显示我的错