Java实现-5到5区间输入校验 二次无效输入被接收问题解决
问题根因
当前代码仅做了单次if条件判断,没有实现循环校验逻辑:
- 第一次读取用户输入后,仅会执行1次合法性判断
- 若第一次输入无效,进入分支打印错误提示后,直接读取第二次输入就结束了判断流程,不会对第二次及后续输入再做校验,因此会出现第二次输入无效值也直接被接收的问题
- 额外注意:现有判断条件
choice<=-5 || choice>=5会将边界值-5、5判定为无效,如果需求是闭区间(允许输入-5和5),需要将判断条件调整为choice < -5 || choice > 5
修复代码
使用while循环实现持续校验,只要输入值不满足合法区间要求,就持续提示用户重新输入,直到拿到合法值再执行后续业务逻辑:
int choice; Scanner sc = new Scanner(System.in); choice = sc.nextInt(); // 输入不合法时持续循环重输 while (choice <= -5 || choice >= 5) { System.out.println("=================================="+"\n"+"INVALID INPUT! PLEASE TRY AGAIN: "+"\n"+"=================================="); choice = sc.nextInt(); } // 输入合法,执行业务逻辑 // do stuff
如果希望把输入读取逻辑统一收敛,避免重复写sc.nextInt(),也可以用带首次输入标记的do-while写法:
int choice; Scanner sc = new Scanner(System.in); boolean isFirstInput = true; do { if (!isFirstInput) { System.out.println("=================================="+"\n"+"INVALID INPUT! PLEASE TRY AGAIN: "+"\n"+"=================================="); } choice = sc.nextInt(); isFirstInput = false; } while (choice <= -5 || choice >= 5); // do stuff
内容的提问来源于stack exchange,提问作者Francois200212
相关产品推荐
相关产品推荐

