当前位置: 代码迷 >> J2SE >> 为什么错误处理产生死循环
  详细解决方案

为什么错误处理产生死循环

热度:139   发布时间:2016-04-24 01:41:08.0
为什么异常处理产生死循环
Java code
import java.util.*;public class RandomNum {    public static void main(String[] args) {        Random random = new Random();        Scanner sc = new Scanner(System.in);        int guess = 0;        int guessNum = 0;        String again = null;        do {            guess = random.nextInt(100);            do {                try {                    System.out.println("请输入您猜到的数字:");                    guessNum = sc.nextInt();                    if (guessNum == guess) {                        System.out.println("恭喜!猜对了!");                        break;                    } else if (guessNum > guess) {                        System.out.println("大了!");                    } else {                        System.out.println("小了!");                    }                } catch (InputMismatchException e) {                    System.out.println("请输入正确格式的数字!");                }            } while (true);            System.out.println("again?(y/n)");            again = sc.next();            if (again.equals("n")) {                System.out.println("End of program.");                break;            }        } while (true);    }}


上面这段代码,在我输入错误的数字格式时捕获异常,比如我输入“21f”,它捕获异常,然后打印"请输入正确格式的数字!",打印完了过后继续执行循环,打印那句:"请输入您猜到的数字:",接下来应该等待我输入啊,可是JVM好像直接把我上一次输入的“21f”作为结果,又开始处理异常,然后这样一直循环。。。
为什么会出现这种情况?能不能麻烦大家给我解释稍微细一点,我是新手。谢谢!

------解决方案--------------------
那是由于出现异常时,还继续保留着输入缓冲中的数据,所以你得先把错误的数据读取出来,然后再等待下一次输入。
------解决方案--------------------
探讨

那是由于出现异常时,还继续保留着输入缓冲中的数据,所以你得先把错误的数据读取出来,然后再等待下一次输入。