蒙提霍尔问题模拟Java代码bug求助:计数逻辑错误
蒙提霍尔问题模拟代码test()方法修正
核心问题修正点
- 循环次数错误:原代码循环条件
i <= numGames会让循环执行numGames + 1次(比如传入100时会跑101次),导致计数多1。需要改为i < numGames,让循环恰好执行numGames次。 - 胜负判断失效:原代码中
if(true)是恒成立条件,完全没有利用playGame()返回的胜负结果来统计,导致不管输赢都累加计数。需要将playGame()的返回值作为判断条件。
修正后的test()方法代码
public void test(int numGames) { int numRunsSwitch = 0; int numRunsStick = 0; // 统计坚持选择的获胜次数 for (int i = 0; i < numGames; i++) { if (playGame(true)) { numRunsStick++; } } // 统计切换选择的获胜次数 for (int i = 0; i < numGames; i++) { if (playGame(false)) { numRunsSwitch++; } } System.out.println("Wins by sticking: " + numRunsStick); System.out.println("Wins by switching: " + numRunsSwitch); }
额外优化建议
- 变量名修正:原代码中
numRumsStick是拼写错误,应该是numRunsStick,修正后避免后续维护混淆。 - 可合并两个循环减少重复代码(可选):
public void test(int numGames) { int numRunsSwitch = 0; int numRunsStick = 0; for (int i = 0; i < numGames; i++) { if (playGame(true)) numRunsStick++; if (playGame(false)) numRunsSwitch++; } System.out.println("Wins by sticking: " + numRunsStick); System.out.println("Wins by switching: " + numRunsSwitch); }
内容的提问来源于stack exchange,提问作者MIchael
相关产品推荐
相关产品推荐

