Java代码循环逻辑修正:choice2相关循环无法正常执行问题
问题分析与修正方案
首先看你这段代码的核心问题:内部的while(boolean_1 == false)循环完全没有退出条件——你初始化了boolean_1 = false,但整个代码里没有任何地方把它改成true,导致这个内部循环会无限执行,外层的do-while循环根本没机会触发判断逻辑。另外,当用户输入非Y/N的字符时,也没有对应的提示和重新输入的逻辑,直接就让流程卡死了。
修正后的代码
private void northroom() { char choice2; String answer2; Scanner keyboard = new Scanner(System.in); // 确保Scanner实例可用,若已在类中声明可移除这行 System.out.println("You press a panel next to the door"); System.out.println("The panel lights up with a pinging sound"); System.out.println("The door slowly scrapes open"); System.out.println("You are now in North Room"); System.out.println("There is an object in the corner of the room shaded by darkness"); do { System.out.println("Would you like to pick up object Yes(Y) or No(N)"); answer2 = keyboard.next().toUpperCase(); // 转大写,兼容小写y/n输入 choice2 = answer2.charAt(0); // 处理不同输入情况 if(choice2 == 'Y') { System.out.println("You go pick up the object"); } else if(choice2 == 'N') { System.out.println("Stare at object because you are useless"); System.out.println("Try again"); } else { System.out.println("Invalid input! Please enter Y or N."); } } while (choice2 != 'Y' && choice2 != 'N'); }
关键修改点
- 移除冗余的
boolean_1变量:这个变量完全没必要,我们直接通过do-while的条件就能控制循环流程,不需要额外的布尔标记。 - 新增无效输入处理:当用户输入不是Y/N时,给出明确提示,引导用户重新输入。
- 兼容大小写输入:用
toUpperCase()把输入统一转成大写,这样用户输入小写y/n也能被识别,提升体验。 - 简化循环结构:把原本嵌套的两层循环合并成一层
do-while,逻辑更清晰,彻底解决内层循环无限卡死的问题。 - 修正文本拼写错误:把原代码里的
coner改成corner,shoraded改成shaded,让输出文本更准确。
额外调整建议
如果你希望用户选N之后必须重新选择,直到选Y为止,可以把do-while的条件改成choice2 != 'Y',这样用户选N后会直接回到输入提示,直到选择Y才退出循环:
do { // 输入和判断逻辑不变 } while (choice2 != 'Y');
这样就能完全实现你想要的循环逻辑啦。
内容的提问来源于stack exchange,提问作者Beep Boop
相关产品推荐
相关产品推荐

