import java.util.InputMismatchException;
import java.util.Scanner;public class HelloWorld {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int counter=0;
int[] num=new int[2];
while(true){
try{
System.out.println("请输入数字"+(counter+1)+":");
num[counter]=in.nextInt();             //A
}catch(InputMismatchException e){

System.out.println("数字格式错误!");
counter--;

}

counter++;
if(counter==2)
break;
}
System.out.println("相减结果为:"+(num[0]-num[1]));
}
}
这个段代码是联系异常处理的。现在的问题是,在A行出如果第一次出入错数据,比如是8Y,就陷入死循环了。也就是不停的输出数字格式错误。
初步怀疑,是在A行发生异常时,错误的数据还保存在scanner类型的in中。造成在第一次输入错误以后,每当执行到A行,in就把错误的数据赋给数组,再次出发异常,就这么死循环了。
现在求一种方法,能清空scanner类型的in中已经读取的数据,请高手赐教!

解决方案 »

  1.   

    in中没有保存输入的内容,它每次都去读取8Y,读到‘Y’是判断不是数字抛出异常,然后继续读取,继续抛出异常,从而陷入死循环。
      

  2.   

    同意1楼的,http://download.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html
    这个提到scanner抛出InputMismatchException异常后, scanner 并不会跳过该异常字符,因此需要通过其它方法来跳过该字符。
      

  3.   

    在异常处理语句中添加一行代码
    in.next();
    因为输入的数据是错位的,就读取出来,不用就是啦