You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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"));
    }
}

修正要点

  1. 把错误判断的||改成&&,准确识别非法输入
  2. 用do-while循环包裹重试输入逻辑,强制用户输入合法的Y/N才会继续流程,完全匹配你要的运行效果

内容的提问来源于stack exchange,提问作者RITCHMOND JAMES TAJARROS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:50:32