这段try catch语句问题出在哪?为什么会死循环不停输出 "请输入整数类型的id!"
while(true){ try { id2 = console.nextInt(); }catch (InputMismatchException ime){ System.out.println("请输入整数类型的id!"); continue; } break; }
while(true){ try { id2 = console.nextInt(); }catch (InputMismatchException ime){ System.out.println("请输入整数类型的id!"); continue; } break; }
2018-02-22
经过本人网上查询,发现原因如下:
java.util.Scanner在获取下一个单词时,如果要求得到的输入跟实际的输入格式不匹配(例如要数字但实际输入不是数字),则会抛出InputMismatchException,并且输入流的内容不会被吞掉。
java.util.Scanner的JavaDoc说得很清楚:
When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.
可以在代码的catch中添加一行:
String token = console.next();
即:
1
2
3
4
5
6
7
8
9
10
while(true){
try {
id2 = console.nextInt();
}catch (InputMismatchException ime){
String token = console.next(); //添加此处代码!
System.out.println("请输入整数类型的id!");
continue;
}
break;
}
把Scanner里不要的内容吞掉,这样Scanner才会进一步读取后面的内容。
经过本人网上查询,发现原因如下:
java.util.Scanner在获取下一个单词时,如果要求得到的输入跟实际的输入格式不匹配(例如要数字但实际输入不是数字),则会抛出InputMismatchException,并且输入流的内容不会被吞掉。
java.util.Scanner的JavaDoc说得很清楚:
When a scanner throws an InputMismatchException, the scanner will not pass the token that caused the exception, so that it may be retrieved or skipped via some other method.
可以在代码的catch中添加一行:
String token = console.next();
即:
while(true){ try { id2 = console.nextInt(); }catch (InputMismatchException ime){ String token = console.next(); //添加此处代码! System.out.println("请输入整数类型的id!"); continue; } break; }
把Scanner里不要的内容吞掉,这样Scanner才会进一步读取后面的内容。
举报