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

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

        }

    }

}

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


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


神不在的星期二
浏览 117回答 2
2回答

慕盖茨4494581

很可能输入已关闭,或者 中的下一个标记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;               }          }    }}您还可以input.hasNextDouble()在致电之前检查一下nextDouble()

潇湘沐

只需添加 input.next()} catch (Exception ex) {   System.out.println("Invalid value entered.. Enter again : ");   input.next();}input.next() 清除扫描仪。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java