while循环中try...catch死循环

public class test {
    public static void main(String[] args) {
        Scanner sv = new Scanner(System.in);
        while (true) {
            System.out.println("请输入值");
            try {
                int index = sv.nextInt();
                show(index);
                break;
            } catch (asd e) {
                System.out.println(e.toString());
                continue;
            } catch (InputMismatchException e) {
                System.out.println("输入错误");
                continue;
            }
        }

    }

    public static void show(int i) {
        if (i < 10) {
            System.out.println(i);
        } else {
            throw new asd("请输入一个小于10的数");
        }

    }
}


//异常
public class asd extends RuntimeException {
    public asd() {

    }

    public asd(String message) {
        super(message);
    }
}

 当输入小于10 的时候,代码会结束while循环

输入大于10 的时候,会一直让重新输入

输入字符的时候,会捕获异常进入死循环

怎么才能解决这个死循环,捕获输入错误,并重新输入

因为你while true啊

所以抓到异常了之后,被catch处理掉了 程序不会停止 然后又到循环头部了

如果你不用try catch,直接获取int之后show 一下,就直接抓到异常 程序就终止了。

try catch就是为了防止程序异常终止。

将Scanner sv = new Scanner(System.in);放在while循环内。

我看你的逻辑就是这样啊,你只有输入小于10的数才结束循环,没问题啊

 catch (asd e) {
                System.out.println(e.toString());
                continue;
            } catch (InputMismatchException e) {
                System.out.println("输入错误");
                continue;
            }

是你的代码有问题,把continue语句改为break语句就正常了。

你代码的逻辑有问题的话,你代码是输入i>10的时候,你用了continue,所以肯定继续循环,当遇到小于10的,你终止了循环,continue用错了

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632