为了账号安全,请及时绑定邮箱和手机立即绑定

做while无限循环

做while无限循环

HUH函数 2021-08-25 16:30:09
我正在尝试编写一个方法,要求用户输入一个正整数。如果未输入正整数,则会输出“请输入正值”的消息。这部分不是问题。问题是,当我尝试实现捕获 InputMismatchExceptions 的 try catch 语句(以防用户意外输入字符或字符串)时,循环无限运行并吐出与 InputMistmatchException 关联的错误消息。这是我的代码:private static int nonNegativeInt(){        boolean properValue = false;        int variable = 0;        do {            try {                while (true) {                    variable = scanner.nextInt();                    if (variable < 0) {                        System.out.println("Please enter a positive value");                    } else if (variable >= 0) {                        break;                    }                }                properValue = true;            } catch (InputMismatchException e){                System.out.println("That is not a valid value.");            }        } while (properValue == false);        return variable;    } 
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

本质上,当给定的令牌无效时,扫描器会遇到错误,因此它无法超过该值。当下一次迭代再次开始时,scanner.nextInt() 再次尝试扫描下一个仍然是无效的输入值,因为它从未通过那里。


你想要做的是添加行


scanner.next(); 

在您的 catch 子句中,基本上说跳过该标记。


旁注:您的方法通常不必要地长。你可以把它缩短成这个。


private static int nonNegativeInt() {

    int value = 0;

    while (true) {

        try {

            if ((value = scanner.nextInt()) >= 0)

                return value;

            System.out.println("Please enter a positive number");

        } catch (InputMismatchException e) {

            System.out.println("That is not a valid value");

            scanner.next();

        }

    }

}


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 205 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信