Java 尝试捕获无限循环时的异常
我希望程序在捕获异常时重新执行while循环——异常接收到文本输入。相反,它将继续使用下面的代码进行while循环,我希望它再次请求用户输入Java 尝试捕获无限循环时的异常,java,while-loop,try-catch,Java,While Loop,Try Catch,我希望程序在捕获异常时重新执行while循环——异常接收到文本输入。相反,它将继续使用下面的代码进行while循环,我希望它再次请求用户输入 import java.util.InputMismatchException; import java.util.Scanner; public class NumberGuess { public static void main(String[] args) { Scanner Scanner = new Scanner(
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.");
}
}
|
是逻辑运算符。使用有条件的| |
if (inputNum > 100 || inputNum < 0) {
if(inputNum>100 | | inputNum<0){
|
是逻辑运算符。请使用条件|
if (inputNum > 100 || inputNum < 0) {
if(inputNum>100 | | inputNum<0){
研究扫描仪上的文档:
当扫描器抛出一个InputMismatchException
时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌
如果捕获到异常,扫描仪将保留在尝试读取号码之前的位置。您必须在捕获块中使用nextLine
将其推进。研究扫描仪上的文档:
当扫描器抛出一个InputMismatchException
时,扫描器将不会传递导致异常的令牌,因此可以通过其他方法检索或跳过该令牌
如果捕获到异常,扫描仪将保留在尝试读取数字之前的位置。必须在捕获块中使用nextLine
将其推进。进行2次更改,如下所示可以帮助您实现所需的功能
1将if(inputNum>100 | inputNum<0){
更改为if(inputNum>100 | inputNum<0){
如果输入非数字数字,例如a,则输入不匹配异常异常可能为caugt
当发生InputMismatchException异常时,添加代码调用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");
}
到
根据上述变化,测试如下所示:
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.
进行以下两项更改可以帮助您实现所需的功能
1将if(inputNum>100 | inputNum<0){
更改为if(inputNum>100 | inputNum<0){
如果输入非数字数字,例如a,则输入不匹配异常异常可能为caugt
当发生InputMismatchException异常时,添加代码调用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");
}
到
根据上述变化,测试如下所示:
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.
Scanner Scanner=new Scanner(System.in);
这真的可以编译吗?@marounnaroun当然可以,它只是不遵循Java的命名conventions@Reimeus很高兴知道,我从未尝试过:)Scanner Scanner=new Scanner(System.in)
这真的可以编译吗?@marounnaroun当然可以,它只是不遵循Java的命名conventions@Reimeus很高兴知道,我从未尝试过:)|
也是一个逻辑运算符。它实现布尔OR函数,就像|
也是一个逻辑运算符一样。它实现布尔OR函数,只是正如|
.Brilliant一样-成功了。只需在catch方法中添加“Scanner.nextLine();”。非常感谢。Brilliant-成功了。只需在catch方法中添加“Scanner.nextLine();”。非常感谢。