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

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.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:21:01