Java While循环中Y/N输入错误处理逻辑失效问题
输入Y/N以外字符时错误处理失效的修复方案
问题情况
- 核心功能正常,但用户输入Y/N以外的字符(如'g')时,校验逻辑不生效
- 当前运行效果:
输入表达式: a+b
是否重试? (Y/N) : g
输入表达式:
_ - 期望运行效果:
输入表达式: a+b
是否重试? (Y/N) : g
Error, Please Try Again!
是否重试? (Y/N) :
_
问题根源
你写的条件判断逻辑有误:!YN.equalsIgnoreCase("N") || !YN.equalsIgnoreCase("Y") 这个表达式永远为true——任何字符串要么不是N,要么不是Y,不可能同时满足是N又是Y。正确的逻辑应该是判断既不是Y也不是N,得用&&(逻辑与)替代||(逻辑或)。
另外原代码在输入非法字符后直接进入下一轮循环,跳回输入表达式的步骤,没有停留在重试确认环节,不符合期望效果。
修正后的代码
if (choice.equals("1")) { String YN = "Y"; while (!YN.equalsIgnoreCase("N")) { System.out.print('\u000C'); System.out.print("Enter the Infix Expression: "); String exp = BReader.readLine(); try { System.out.println("Postfix Expression: " + infixToPostfix(exp)); } catch(Exception e) { System.out.println("Enter correct expression."); } System.out.println(); // 单独循环处理重试输入,直到用户输入合法的Y/N do { System.out.print("Try Again? (Y/N) : "); YN = BReader.readLine(); if (!YN.equalsIgnoreCase("Y") && !YN.equalsIgnoreCase("N")) { System.out.println("Error, Please Try Again!"); } } while (!YN.equalsIgnoreCase("Y") && !YN.equalsIgnoreCase("N")); } }
修正要点
- 把错误判断的
||改成&&,准确识别非法输入 - 用
do-while循环包裹重试输入逻辑,强制用户输入合法的Y/N才会继续流程,完全匹配你要的运行效果
内容的提问来源于stack exchange,提问作者RITCHMOND JAMES TAJARROS
相关产品推荐
相关产品推荐

