为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2023-07-19 17:08:55
当输入无效输入时,它会转到 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 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

很可能输入已关闭,或者 中的下一个标记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()


查看完整回答
反对 回复 2023-07-19
?
潇湘沐

TA贡献1816条经验 获得超6个赞

只需添加 input.next()


} catch (Exception ex) {

   System.out.println("Invalid value entered.. Enter again : ");

   input.next();

}

input.next() 清除扫描仪。


查看完整回答
反对 回复 2023-07-19
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信