我想用Scanner接收一个整型输入,并在出现输入非整型情况时抛出异常提示,同时要求用户重新输入,用了如下代码:import java.util.Scanner;public class HelloWorld{ public static void main(String[] args){ int i = 0; Scanner sc = new Scanner(System.in); System.out.println("请输入数量:"); while(true) { try { i = sc.nextInt(); System.out.println("i="+i); break; } catch(Exception e) { System.out.println("请输入一个整型数字:"); } } }}执行如下:请输入数量:a请输入一个整型数字:请输入一个整型数字:请输入一个整型数字:……在接收到一个非法输入a时,程序重复不断抛出异常提示“请输入一个整型数字:”,而不能中断接收新的输入,请问这是为什么,错在哪里?
4 回答
慕娘4410084
TA贡献1条经验 获得超2个赞
while (true) {
try {
id1 = sc.nextInt();
break;
} catch (InputMismatchException e) {
System.out.println("请输入整数型的ID:");
sc.next();// 读取下一个值,如果不加这条语句,控制台得到的还是你上次输入的数,再一次进入catch语句,所以会一直循环报错
}
}
viva_la_vida
TA贡献1条经验 获得超0个赞
sc .nextInt() 只会在找到匹配之后 才会 向前移动,因此每一次匹配仍然会在当前的输入之中进行匹配
具体可以查看:
String java.util.Scanner.next(Pattern pattern)
Returns the next token if it matches the specified pattern. This method may block while waiting for input to scan, even if a previous invocation of hasNext(Pattern) returned true. If the match is successful, the scanner advances past the input that matched the pattern.
添加回答
举报
0/150
提交
取消