While循环跳过用户输入

时间:2020-03-06 17:24:28

标签: java

我试图将扫描程序命令保留在while循环中,直到用户提供良好的输入为止。如果我运行以下命令,则如果我先输入错误(但要等待第一个输入),它会一直循环而不等待输入。为什么呢?

while (true){ 
    System.out.println("Enter temperature in Fahrenheit: ");
    try {
        x = in.nextFloat();
        break;
    } catch (InputMismatchException e) {
        System.out.println("Please enter a valid temperature!");
        e.printStackTrace();
        continue;
    }
}

2 个答案:

答案 0 :(得分:2)

尝试这种方式:

    while (true){ 
        System.out.println("Enter temperature in Fahrenheit: ");
        try {
            x = Float.parseFloat(in.nextLine());
            break;
        } catch (Exception e) {
            System.out.println("Please enter a valid temperature!");
            e.printStackTrace();
            continue;
        }
    }

答案 1 :(得分:1)

当扫描仪引发InputMismatchException时,扫描仪将不会 传递导致异常的令牌,以便可以将其检索 或通过其他方法跳过。

每个https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

它不断重复读取相同的令牌,并不断尝试将其转换为float并失败。

您需要在异常处理程序中使用该令牌,以便循环的下一次迭代将阻止等待更多输入。