检查输入是否为数字时出现逻辑错误,如果不是,则重新请求用户输入直到有效

logical error while Checking Whether the input was numeric, if not re-request users input until valid

当输入无效输入时,它会转到 catch 块并无限执行 catch 块,而不会循环回 try 块以获取另一个输入

输入有效数据时有效

public static double getInputNumber(Scanner input){
    double num=0;
    while(true) {
        try {
            num = input.nextDouble();
            return num;
        } catch (Exception ex) {
            System.out.println("Invalid value entered.. Enter again : ");
        }
    }
}

预期 - 当输入无效值时,向用户显示错误消息并重新输入,直到用户输入有效值。

实际 - 当输入无效值时,它会在屏幕上重复显示错误消息而无需重新输入

只需添加 input.next()

} catch (Exception ex) {
   System.out.println("Invalid value entered.. Enter again : ");
   input.next();
}

input.next() 清除扫描仪。

很可能是输入已关闭,或者 input 中的下一个标记不是双精度。这些中的任何一个都会导致抛出异常,而不推进输入,从而导致无限循环。

所以你需要找出错误的原因,采取适当的行动 - 例如,像:

public static double getInputNumber(Scanner input){
    double num=0;
    while(true) {
              try {
                  num = input.nextDouble();
                  return num;
               } catch (InputMismatchException ex) {
                   System.out.println("Invalid value entered.. Enter again : ");
               } catch (NoSuchElementException ex) {
                   System.out.println("Input exhausted ");
                   return 0;
               } catch (IllegalStateException ex) {
                   System.out.println("Scanner closed ");
                   return 0;
               }
          }
    }
}

您也可以在调用 nextDouble()

之前使用 input.hasNextDouble() 检查