public class ExceptionDemo{
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int temp=0;
int i=0;
//输入一个数,大于零时重新输入,小于零跳出,输入出现异常时,
//重新输入,并打印警告,但是出现异常时却一直陷入死循环。
while(true){
System.out.println(i++);
System.out.print("请输入一个不大于10的数字:");
try {
temp=input.nextInt();
} catch (Exception e) {
System.err.println("请按要求输入!");
continue;
}
if(temp>9){
System.err.println("请按要求输入!");
continue;
}else{
break;
}
}
}
}
11 回答
已采纳
为谁风露_立中宵
TA贡献1条经验 获得超2个赞
scanner在要求用户输入的时候,其实是在内存中保存了用户输入,输入字母等就会存入该段内存。当我们用input.nextInt()调用时,就不能调用出来,因为它不是我们要调用的int类型,这时就会报输入不匹配错误。可是问题就在这儿,我们用input.nextInt()调用没把该段内存中的东西提出来,他就会一直占用这段内存,导致我们二次输入时,就不会再要求用户输入了,他会继续试图调用该段内存数值。
所以解决办法就是我们清空该段内存,或者把该段内存中的数值取出。所以我们在catch块中使用 input.next(); 就可以解决。因为input.next()是得到字符串所以可以把该段内存中的值取出。因此最终可通过如下方式解决
try { temp=input.nextInt(); } catch (Exception e) { input.next(); System.err.println("请按要求输入!"); continue; }
其余的不变!
添加回答
举报
0/150
提交
取消