为什么这个代码会在我输入更多值时引发异常,如果使用它就会在内部。
异常消息:
线程中的异常" main" java.util.NoSuchElementException
我的代码:
while (true) {
try {
Scanner in = new Scanner(System.in);
int choose = in.nextInt();
in.close();
if (choose == 1 || choose == 2 || choose == 3) {
return choose;
}
else
{
System.out.println("else text");
}
} catch (InputMismatchException e) {
System.out.println("exception text");
}
答案 0 :(得分:2)
如果您关闭System.in
,则无法重新打开它。删除close()
调用以解决此问题。您也可以将Scanner
对象移出循环。无需在每次迭代中创建它。
final Scanner in = new Scanner(System.in);
while (true) {
try {
int choose = in.nextInt();
if (choose == 1 || choose == 2 || choose == 3) {
return choose;
} else {
System.out.println("else text");
}
} catch (InputMismatchException e) {
System.out.println("exception text");
}
}
答案 1 :(得分:1)
Scanner.close()
包含这个小片段(我的粗体):
如果此扫描程序尚未关闭,则如果其底层可读也实现了Closeable接口,则将调用可读的close方法。
由于System.in
的类型为InputStream
,因此会实现Closeable
,因此关闭扫描程序也会关闭基础标准输入流。
然后,下次尝试使用System.in
创建扫描程序时,后者将已关闭。 _那就是你获得例外的原因。
你最好在循环外创建一次扫描器,然后只是在没有关闭的情况下读取值,如果你想跳过输入而不是nextLine()
一个整数。
答案 2 :(得分:0)
只需删除in.close();
即可。