无输入时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
相关产品推荐
相关产品推荐

