Java - 用户输入 - 出错时循环

时间:2012-09-05 09:57:37

标签: java python loops while-loop nan

这是我的Java代码:

Scanner userInput = new Scanner(System.in);
while (true) { // forever loop
    try {
        System.out.print("Please type a value: "); // asks user for input
        double n = userInput.nextDouble(); // gets user input as a double
        break; // ends if no error
    }
    catch (Throwable t) { // on error
        System.out.println("NaN"); // not a number
    }
}

你可以从评论中看到这应该做什么。

但是当我输入不是数字的东西时,会发生这种情况:

Please type a value: abc
NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN
Please type a value: NaN

依此类推,直到我强制停止它为止。

在Python中我会这样做:

while True:
    try:
        n = float(raw_input("Please type a value: "))
        break
    except Exception:
        print "NaN"

我如何用Java做到这一点? 我尝试过使用do while

4 个答案:

答案 0 :(得分:2)

catch阻止中调用nextLine()方法。

  

使此扫描程序超过当前行并返回该输入   被跳过了。此方法返回当前行的其余部分,   排除末尾的任何行分隔符。该职位设定为   下一行的开头。

     

由于此方法继续搜索输入以查找a   行分隔符,它可以缓冲搜索该行的所有输入   如果没有行分隔符则跳过。

 catch (InputMismatchException t) { // on error
    userInput.nextLine();
    System.out.println("NaN"); // not a number
  }

答案 1 :(得分:1)

while (true) { // forever loop
    try {
        scanner userInput = new Scanner(System.in); 
        System.out.print("Please type a value: "); // asks user for input
        double n = userInput.nextDouble(); // gets user input as a double
        break; // ends if no error
    }
    catch (Throwable t) { // on error
        System.out.println("NaN"); // not a number
    }
}

你应该在while循环中使用scanner类,只有当给定的输入值错误时才会询问下一个输入值。

答案 2 :(得分:0)

试试这个,

double n;
boolean is_valid;

do {
    try {
        System.out.print("Please type a value: ");
        Scanner kbd = new Scanner(System.in);
        n = kbd.nextDouble();
        is_valid = true;
    } catch (Exception e) {
        System.out.println("NaN"); 
        is_valid = false;
    }
} 
while (!is_valid);

答案 3 :(得分:0)

如上所述, 您可以这样更改:

    Scanner userInput = new Scanner(System.in);
    while (true) { // forever loop
        try {
            System.out.print("Please type a value: "); // asks user for input
            double n = userInput.nextDouble(); // gets user input as a double
            break; // ends if no error
        }
        catch (Throwable t) { // on error
            System.out.println("NaN"); // not a number
            userInput.nextLine();
        }
    }