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

如何修复Java二十一点爆牌系统中if语句的延迟提示问题?

解决二十一点程序爆牌提示延迟的问题

嘿,我来帮你搞定这个爆牌提示延迟的问题!你的核心问题在于代码逻辑顺序不对——现在的流程是加牌后先显示点数、询问要不要继续,之后才检查是否爆牌,这就导致即使玩家已经爆牌,还是会先跳出要牌询问,等你再输入一次y才触发爆牌提示。

问题代码的逻辑痛点

原来的循环里,当你输入y要牌后:

  1. 先判断当前点数是否小于21,执行加牌
  2. 显示新点数,再次询问要不要牌
  3. 最后才检查是否爆牌
    这就导致爆牌的提示被延后到了下一次循环,完全不符合玩家的预期。

修改后的代码(直接解决问题)

调整逻辑顺序,加牌后立刻检查是否爆牌,如果爆牌就直接终止要牌流程,不再询问:

System.out.println("Would you like another card? \ny/n");
answer = sanswer.nextLine();

while ("y".equals(answer)) {
    // 先执行加牌操作
    hit = (int) Math.floor(Math.random() * 10) + 1;
    total += hit;

    // 加牌后第一时间检查是否爆牌
    if (total > 21) {
        System.out.println("______________");
        System.out.println("Your total is " + total);
        System.out.println("You went bust");
        System.out.println("You now have $" + money);
        play = "no";
        System.out.println("Would you like to play again? y/n");
        answer = ""; // 重置answer让循环退出
        play = srplay.next();
        break; // 直接跳出循环,不再执行后续的要牌询问
    }

    // 只有没爆牌的情况下,才显示点数并询问是否继续要牌
    System.out.println("____________________________\n");
    System.out.println("Your total is " + total);
    System.out.println("Would you like another card? \ny/n");
    answer = sanswer.nextLine();
}

关键调整说明

  • 移除了原来的if (total < 21)判断:不管当前点数多少,用户选择要牌就执行加牌(毕竟玩家可能手滑,但加牌后我们会立刻检查)
  • 把爆牌检查移到加牌之后的最前面:一旦加牌后点数超过21,直接触发爆牌提示,终止要牌流程
  • 用break强制跳出循环:确保爆牌后不会再执行显示点数和询问要牌的代码

这样修改后,玩家加牌爆牌的瞬间就会收到提示,不会再出现“显示爆牌点数还问要不要牌”的尴尬情况啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:22:53