我在理解代码无法正常工作时遇到问题。我的目标是继续阅读用户的输入,直到用户最终进入" 5",代码将继续。 我很欣赏可能有更好的方法,并且愿意采用更简洁的方法来解决这个问题(尝试解析一个字符串),但是我的问题更为好奇,为什么我的方法不起作用而不是寻找一种更好的方法。
当输入任何整数时,代码工作正常,但是如果我输入一个String,代码会连续循环,并且始终启动catch块而不需要任何输入。我认为扫描仪的一个功能是保留我的输入,但我不确定。
我的代码如下:
import java.util.Scanner;
import java.util.InputMismatchException;
public class App {
public static void main(String[] args) {
int temp = 0;
System.out.println("Enter the number 5: ");
while (temp != 5) {
try {
temp = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("Try again!");
}
}
System.out.println("Got it!");
sc.close();
}
}
答案 0 :(得分:2)
如果要读取的下一个不是整数,那么nextInt
不会读取任何内容。因此,如果您输入“hi”,则nextInt
会引发InputMismatchException
,您的程序会再次调用nextInt
。 那个调用仍会抛出一个InputMismatchException
,因为接下来要读的东西仍然是“hi”,这不是一个整数。然后你的程序再次调用nextInt
,并且出于同样的原因再次抛出异常。等等。
一种可能的解决方案是调用sc.next()
,并忽略结果:
try {
temp = sc.nextInt();
} catch (InputMismatchException e) {
sc.next(); // ignore whatever the user typed that wasn't an integer
System.out.println("Try again!");
}
答案 1 :(得分:1)
正确的代码版本就是这样的。扫描仪不知道是否输入Int。让读取行并解析它并检查它是否为整数然后继续。
import java.util.Scanner;
import java.util.InputMismatchException;
public class App {
public static void main(String[] args) {
int temp = 0;
System.out.println("Enter the number 5: ");
Scanner sc = new Scanner(System.in);
while (temp != 5) {
try {
String str = sc.nextLine();
temp = Integer.parseInt(str);
} catch (NumberFormatException e) {
System.out.println("Try again!");
}
}
System.out.println("Got it!");
sc.close();
}
}
答案 2 :(得分:0)
以下是我的想法:
int
时,工作正常。 sc.nextInt();
能够将输入解析为有效的整数值。sc.nextInt();
会抛出异常,因为输入字符串不是有效的整数值。 (temp != 5)
始终为真,因此循环无限重复。