Java求助:计算1000局游戏中掷出蛇眼所需次数的平均值
解决1000局游戏中每局掷出蛇眼所需次数的平均值问题
嘿,我懂你之前的困惑!把“1000次掷骰里蛇眼出现的次数”和“1000局游戏中每局出蛇眼需要的掷骰次数平均值”搞混太正常了,这俩逻辑完全不同。咱们一步步来实现正确的计算:
核心思路
- 循环执行1000局游戏,每一局独立计算:
- 每局开始后,不断掷两个骰子,直到掷出蛇眼(两个骰子都是1)
- 记录这一局总共掷了多少次骰子
- 把1000局的掷骰次数全部累加,最后除以1000,得到每局所需次数的平均值
完整Java代码实现
import java.util.Random; public class SnakeEyeAverage { public static void main(String[] args) { // 初始化随机数生成器,模拟掷骰子 Random random = new Random(); // 设定总游戏局数 final int TOTAL_GAMES = 1000; // 记录所有局的掷骰总次数 int totalRollsAcrossGames = 0; // 外层循环:运行1000局游戏 for (int game = 1; game <= TOTAL_GAMES; game++) { int rollsThisGame = 0; boolean gotSnakeEyes = false; // 内层循环:当前局持续掷骰子,直到出现蛇眼 while (!gotSnakeEyes) { // 生成1-6的随机数模拟骰子点数(nextInt(6)返回0-5,加1转为1-6) int die1 = random.nextInt(6) + 1; int die2 = random.nextInt(6) + 1; rollsThisGame++; // 判断是否掷出蛇眼 if (die1 == 1 && die2 == 1) { gotSnakeEyes = true; } } // 将当前局的掷骰次数累加到总次数中 totalRollsAcrossGames += rollsThisGame; } // 计算平均值:强制转为double避免整数除法丢失精度 double averageRollsPerGame = (double) totalRollsAcrossGames / TOTAL_GAMES; System.out.printf("1000局游戏中,每局掷出蛇眼的平均掷骰次数为:%.2f%n", averageRollsPerGame); } }
代码关键点说明
- 随机数模拟骰子:用
Random.nextInt(6)+1生成1到6的整数,完美还原标准骰子的点数范围 - 每局独立统计:每局开始时重置局内掷骰次数和蛇眼标记,确保每局计算互不干扰
- 精度保障:将总次数强制转换为
double类型后再除以局数,避免整数除法直接舍去小数部分的问题
按概率论的几何分布理论,每局掷出蛇眼的理论平均次数是36次(因为掷出蛇眼的概率是1/36,期望为1/p=36),你运行代码后得到的结果会接近这个数值~
内容的提问来源于stack exchange,提问作者Lili V.
相关产品推荐
相关产品推荐

