为什么它会在while循环中继续重复“请输入一个有效的数字”并且不断停止让用户输入内容。
while (true) { //This will continually run until something is returned, AkA the number 1 or 2
Scanner s = new Scanner(System.in);
try {
input = s.nextInt();
} catch (Exception e) {
System.out.println("Please enter a valid number!");
}
s.close();
}
当我使用调试器时,似乎没有任何问题导致此问题,并且不会引发任何错误。造成这个问题的原因是什么?如何解决?
答案 0 :(得分:1)
关闭扫描程序 如果实现Closable
接口,则关闭基础流。
在这种情况下,这是System.in
,一旦关闭,您将无法再次使用它创建扫描仪。
有关详细信息,请参阅http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#close()。
但是,即使您解决了这个问题,nextInt
的异常也不会使流指针前进,因此,下次调用它时,它会再次在输入流中找到完全相同的数据。
您需要在再次尝试之前清除错误数据。由于您接受用户输入,因此一种解决方案是调用nextLine
并将其丢弃;
string junk = s.nextLine();
答案 1 :(得分:0)
删除
s.close();
并在while循环之外定义您的Scanner对象,因为它不是问题。顺便说一句,我已经尝试过你的代码,它运行正常,直到我输入的输入不是int。当我输入一个字符串时,异常sysout语句会无限打印
所以你要添加
string junk = s.nextLine();
在您的异常块中,如paxdiablo所说,它不会不断重复。