java小白,为什么这里会陷入死循环?!

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;
            }
        }
    }
}


blackbamboo
浏览 2724回答 11
11回答

为谁风露_立中宵

scanner在要求用户输入的时候,其实是在内存中保存了用户输入,输入字母等就会存入该段内存。当我们用input.nextInt()调用时,就不能调用出来,因为它不是我们要调用的int类型,这时就会报输入不匹配错误。可是问题就在这儿,我们用input.nextInt()调用没把该段内存中的东西提出来,他就会一直占用这段内存,导致我们二次输入时,就不会再要求用户输入了,他会继续试图调用该段内存数值。   所以解决办法就是我们清空该段内存,或者把该段内存中的数值取出。所以我们在catch块中使用 input.next(); 就可以解决。因为input.next()是得到字符串所以可以把该段内存中的值取出。因此最终可通过如下方式解决    try {                 temp=input.nextInt();             } catch (Exception e) {              input.next();                 System.err.println("请按要求输入!");                 continue;             }其余的不变!

kstg5944571

while(true)···这是恒成立的,当然一直死循环啦,改成temp>=0试试

不偏不易

要学会Debug设置断点,并Debug.一步一步走下去,观察变量。然后就能发现错误。

晋强

在捕获异常中 把continue改为break

blackbamboo

我是想在里面的代码中跳出,现在的情况是,一但有异常,就一直循环,不会给我输入的机会。

慕粉3248975

出现异常时,不应该用continue,用break就可以跳出循环了,continue是进入下一次循环同时你这段程序的代码逻辑有问题

1255321142

你的代码编译都不通过吧!return后面还有代码?

慕用9836023

while (true){}注定是一个死循环
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java