有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

当输入无效输入时,它将转到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 : ");
        }
    }
}

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

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


共 (2) 个答案

  1. # 1 楼答案

    只需添加输入。下一个()

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

    输入。next()清除扫描仪

  2. # 2 楼答案

    很可能输入已关闭,或者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()进行检查