如何修复Java二十一点爆牌系统中if语句的延迟提示问题?
解决二十一点程序爆牌提示延迟的问题
嘿,我来帮你搞定这个爆牌提示延迟的问题!你的核心问题在于代码逻辑顺序不对——现在的流程是加牌后先显示点数、询问要不要继续,之后才检查是否爆牌,这就导致即使玩家已经爆牌,还是会先跳出要牌询问,等你再输入一次y才触发爆牌提示。
问题代码的逻辑痛点
原来的循环里,当你输入y要牌后:
- 先判断当前点数是否小于21,执行加牌
- 显示新点数,再次询问要不要牌
- 最后才检查是否爆牌
这就导致爆牌的提示被延后到了下一次循环,完全不符合玩家的预期。
修改后的代码(直接解决问题)
调整逻辑顺序,加牌后立刻检查是否爆牌,如果爆牌就直接终止要牌流程,不再询问:
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
相关产品推荐
相关产品推荐

