Java跳棋游戏nextTurn方法单次调用打印两次回合问题求助
问题原因
nextTurn方法中使用了两个独立的if判断,未做分支互斥:
进入nextTurn时初始玩家为黑方,第一个if条件命中后,玩家会被修改为白方并打印白方回合信息;由于两个if是顺序执行的,修改后的玩家值刚好命中第二个if的判断条件,会再次触发切换逻辑、打印黑方回合信息,因此出现一次方法调用打印两次回合信息的问题。
修复方案
将nextTurn方法的第二个if改为else if,让两个分支互斥,修改后代码如下:
public void nextTurn (){ if(this.player.equals("Black")){ setPlayer("White"); printTurn(); } else if (this.player.equals("White")) { setPlayer("Black"); printTurn(); } }
- 额外可优化点:
- 无用导入
import jdk.jfr.internal.test.WhiteBox;可以直接删除 isValidPosistion方法名存在拼写错误,正确拼写应为isValidPosition- 主方法中声明的
Scanner未实际使用,可删除对应声明和导入语句
- 无用导入
修复后逻辑验证
- 实例化
CheckersHelper时,构造函数初始化玩家为黑方,打印It's Blacks turn - 调用
nextTurn时仅命中黑方分支,切换为白方后打印It's Whites turn,后续不会触发白方分支 - 最终输出与预期完全一致。
内容的提问来源于stack exchange,提问作者Quincy van Deursen
相关产品推荐
相关产品推荐

