当我试图让用户重新输入一个数字时,会出现这个错误。
while(guess != num) {
System.out.println("Guess a number between 1 and 10.");
try{
guess = scan.nextInt();
}catch(Exception e) {
System.out.println("Enter a valid number.");
guess = scan.nextInt();
}
}
错误显示在guess=scan的下一次迭代中。nextInt();
输入/输出:
Guess a number between 1 and 10.
d
Enter a valid number.
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at HiLo.main(HiLo.java:19)
我只是重新学习Java,任何帮助都很感激。
在读取任何不是整数的字符后,由Scanner实例的方法nextInt
引发。Java中整数变量(int
)的最大和最小大小也必须考虑。
这个问题有点不清楚,但是从给定的代码和示例用户输入中,我猜测目标是让用户重新输入一个数值,直到键入所需的数字,同时通知用户错误的输入类型。
以下是实现这一目标的方法:
public class NumberGuessing {
public static void main(String[] args) {
int guess = -1;
int num = 9;
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("Guess a number between 1 and 10.");
String enteredValue = scan.next();
while(!validNumber(enteredValue)) {
System.out.println("Enter a valid number.");
enteredValue = scan.next();
}
guess = Integer.parseInt(enteredValue);
if (guess == num) {
System.out.println("That's right! The hidden number was: " + num);
break;
}
}
}
private static boolean validNumber(String s) {
try{
int num = Integer.parseInt(s);
return num >= 1 && num <= 10; //change this to `return true;` if range check is not needed
}catch(NumberFormatException e) {
return false;
}
}
}
它使用Scanner实例的方法next()
的原因是nextInt
只读取它看到的第一个字符串,而不读取新行字符。因此,当使用内部的nextInt
循环时,下一次迭代将尝试读取新行字符,这也将导致输入不匹配异常。
最好从控制台读取整行
Next()
,然后解析它,使输入符合用户需求。
Edit2:如果不需要范围检查,您可以使用正则表达式检查:
while (guess != num) {
System.out.println("Guess a number between 1 and 10.");
String enteredValue = scan.next();
while (!enteredValue.matches("-?\\d+")) {
System.out.println("Enter a valid number.");
enteredValue = scan.next();
}
guess = Integer.parseInt(enteredValue);
}
它允许在某些情况下可能不是有效数字的数字中使用前导“0”,如果要避免前导“0”,请将
匹配方法更改为
。匹配(“-?(0 |[1-9]\\d*)”
。
因此,您的catch语句在技术上处理异常,但是如果您没有输入数字(try{1}中的扫描行),它仍然会抛出原始异常。您必须在catch语句中调用scan.next();
。Java扫描器就是这样奇怪的。
while(guess != num) {
System.out.println("Guess a number between 1 and 10.");
try{
guess = scan.nextInt();
}catch(Exception e) {
System.out.println("Enter a valid number.");
scan.next();
}
}
这应该行得通。
我的代码中出现了这个错误。 这是我的代码: 这就是结果。错误:在线程“main”java中输入model:Exception。lang.NullPointerException在汽车上。主(车.java:10)
不断得到这个错误,不确定为什么有人可以帮助:
我对Java非常陌生,似乎遇到了一些奇怪的错误。我到处寻找解决方案,我遇到的所有解决方案都与我已有的完全相同。 我已经编写了一个类,将目的地添加到ArrayList,但它不起作用。 我得到了这个错误:“线程中的异常”main“java.lang.NullPointerException” 这是我的代码: 我试图添加到ArrayList的数据的代码是这样的: 它退出方法中的程序,并且不将目标添加到数
我在线程“main”java中遇到异常。错误:未解析编译。 我做错了什么? 线程“main”中出现异常: java.lang.错误:未解决的编译问题: 对于类型在
我正在通过selenium学习自动化测试教程,并且正在用java语言编写我的第一个脚本,并且在Eclipse的“控制台”中得到了这条消息。 我的代码: 教程链接:http://toolsqa.wpengine.com/selenium-webdriver/first-test-case/
我从GitHub克隆了我的项目,现在我无法运行我的项目。 我收到以下错误: 知道是什么导致了这个错误吗? 编辑 我检查了这个问题Intellij在我发布到这里之前突然抛出ClassNotFoundException,它没有给我任何解决方案...为什么要将我的问题标记为重复,因为那个问题不能解决我的问题?