猿问

做while无限循环

我正在尝试编写一个方法,要求用户输入一个正整数。如果未输入正整数,则会输出“请输入正值”的消息。这部分不是问题。问题是,当我尝试实现捕获 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;

    } 


HUH函数
浏览 206回答 3
3回答

阿波罗的战车

本质上,当给定的令牌无效时,扫描器会遇到错误,因此它无法超过该值。当下一次迭代再次开始时,scanner.nextInt() 再次尝试扫描下一个仍然是无效的输入值,因为它从未通过那里。你想要做的是添加行scanner.next();&nbsp;在您的 catch 子句中,基本上说跳过该标记。旁注:您的方法通常不必要地长。你可以把它缩短成这个。private static int nonNegativeInt() {&nbsp; &nbsp; int value = 0;&nbsp; &nbsp; while (true) {&nbsp; &nbsp; &nbsp; &nbsp; try {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if ((value = scanner.nextInt()) >= 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("Please enter a positive number");&nbsp; &nbsp; &nbsp; &nbsp; } catch (InputMismatchException e) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; System.out.println("That is not a valid value");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; scanner.next();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}
随时随地看视频慕课网APP

相关分类

Java
我要回答