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

无输入时While循环无法终止问题求助

问题根源

你用的Scanner.next()方法会自动跳过所有空白字符(包括回车、空格、制表符),并且只读取到下一个空白字符为止。当你直接按回车(无输入)时,next()会一直阻塞等待非空白输入,根本不会返回空字符串,所以exp.length()==0的判断永远触发不了,循环自然退不出去。

解决办法

把exp = s.next();改成exp = s.nextLine();,nextLine()会读取整行输入,包括空行(直接回车时返回长度为0的字符串),这样就能触发退出逻辑。

如果你的Scanner实例s之前用过next()/nextInt()等方法,可能会残留换行符在输入缓冲区,导致第一次调用nextLine()直接读取到空字符串。这种情况需要在循环前先调用一次s.nextLine()清空缓冲区,但从你的代码看目前不存在这个问题,直接替换即可。

修改后的完整代码
boolean valid = true;
String exp = " ";
while(valid) {
    System.out.println("CS211 Spring Quarter 2023");
    System.out.print("Enter a math expression : "); 
    exp = s.nextLine(); // 替换为nextLine()
    if(exp.length() == 0) {
        valid = false;
        continue; // 跳过后续验证逻辑,直接进入循环退出判断
    }           
    // 仅当表达式有效时,转换为后缀表达式并计算
    if(evaluationofexpression.evalexpress(exp)) {
         System.out.println();
         String postfix = infixtopostfix.infix2postfix(exp);             
         String evaluated = String.valueOf(evalpostfix.evaluatePostfix(postfix));                
         System.out.println("infix expression:"+ exp);
         System.out.println("postfix expression:"+ postfix);
         System.out.println("evaluated expression:"+ evaluated);
         System.out.println();
    }
    // 表达式无效时提示重试
    else {
        System.out.println("Try again");
        System.out.println();
    }
}
System.out.println("bye");
额外优化说明

在valid = false;后面加continue;是为了避免空字符串进入后续的表达式验证逻辑,空输入本来就是要退出,不需要再走evalexpress的判断,直接跳过后面的代码,程序会直接退出循环打印"bye",更符合预期。

内容的提问来源于stack exchange,提问作者theinkykangawoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:52:49