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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:47