日期:2014-05-20  浏览次数:20737 次

循环中处理异常的问题
在while循环中处理捕获输入的异常当出现异常并捕获之后就出现了问题这是我的代码:
......

while(true){

try{
System.out.println("请输入学号:");
n=scan.nextInt();
break;
}catch(Exception e){
System.out.println("请输入整数!");
}
}
......

当输入一个不是整数的时候它就会出现下面的死循环:

请输入整数!
请输入学号:
请输入整数!
请输入学号:
请输入整数!
请输入学号:
请输入整数!
请输入学号:
......
在"请输入整数!"和请输入学号"之间没有停顿!!!

请问大家这该怎么解决?有没有其他方法可以代替?


------解决方案--------------------
我两天前也问过同样的问题……

是这样的,当你输入一个非整数的时候,程序捕获异常,然后处理,打印:请输入整数!
然后再进入循环,打印:请输入学号:。可是它没有等待你输入又直接捕获异常是因为Scanner方法中会留下缓存,JVM直接把上一次的缓存提取为你这次的输入结果。所以依旧报错……
------解决方案--------------------
while (true) {
try {
System.out.println("请输入学号:");
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
break;
} catch (Exception e) {
System.out.println("请输入整数!");
}
}

红色的这一句需要放到while循环里。。。