java中非数字输入的无限循环

时间:2016-10-26 02:29:55

标签: java

这是一个以double为输入的简单java函数。它需要一个输入并首先检查该值是否为非数字。然后检查该值是否大于0。

我面临的问题是,每次输入非数字输入时,它都会运行无限循环,只打印"Enter a number greater or equal to 1.0: "

double getInput(double n) {
    Scanner kbd = new Scanner(System.in);
    boolean flag = false;
    boolean check = false;
    while (!flag) {
        System.out.println("Enter a number greater or equal to 1.0: ");
        try {
            n = kbd.nextDouble();
            if (n >= 0 || n < 0)
                check = true;
        } catch (InputMismatchException ex) {
            err.print("Invalid Data Type (not Numeric)");
        }
        if (check == true) {
            if (n < 0)
                System.out.println("Invalid value (too small)");
            else
                flag = true;
        }
    }
    return n;
}

2 个答案:

答案 0 :(得分:0)

Illuminate\Support\Collection不会消耗换行符,因此会将这些字符重复传递到while循环中。

在catch块中而不是仅抛出异常,您可以传递kbd.nextLine(),以便在下一个循环中输入方法就绪。

kbd.nextDouble

以下是完整的代码:

catch(InputMismatchException ex)
            {

                System.out.println("Invalid Data Type (not Numeric)");
                kbd.nextLine();
            }

答案 1 :(得分:0)

从扫描仪读取双值不会读取行尾

n = kbd.nextDouble();

所以扫描程序对象将有一些东西要读取,除非你得到行结束调用

kbd.nextLine();

在异常到来之后完全做到这一点的逻辑点......

 catch (InputMismatchException ex) {
        System.err.print("Invalid Data Type (not Numeric)");
        kbd.nextLine();  ///here!!!
        }