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

Java模拟双骰投掷1000次及双幺出现均值计算技术问询

完善掷骰子统计双幺平均值的Java程序

嘿,我来帮你搞定这个程序!先看看你现有代码里的小问题,然后一步步完成需求:

现有代码的小问题

你写的这段代码里有个多余且无效的判断:

if (die1 != 1 && die2 != 1); { }

这里的分号;会让if语句直接结束,后面的空块{}完全没用,而且这个判断本身也没必要——我们只需要关注**双幺(两个骰子都是1)**的情况,其他情况不需要额外处理。

完善后的完整代码

下面是修复并完成后的代码,关键部分我加了注释说明:

public class RollDiceforloop {
    public static void main(String[] args) {
        int die1, die2, snakeEyeCount;
        final int TOTAL_ROLLS = 1000; // 用常量定义总次数,后续修改更方便
        
        snakeEyeCount = 0;
        
        for (int rolls = 0; rolls < TOTAL_ROLLS; rolls++) {
            // 生成1-6的随机数模拟骰子点数
            die1 = (int)(Math.random() * 6) + 1;
            die2 = (int)(Math.random() * 6) + 1;
            
            // 判断是否是双幺,是的话计数+1
            if (die1 == 1 && die2 == 1) {
                snakeEyeCount++;
            }
        }
        
        // 计算平均值:必须用浮点除法,避免整数除法截断结果
        double snakeEyeAverage = (double) snakeEyeCount / TOTAL_ROLLS;
        
        // 输出直观的结果
        System.out.println("掷骰子1000次后,双幺出现的次数:" + snakeEyeCount);
        System.out.println("双幺出现的平均值(概率):" + snakeEyeAverage);
        System.out.println("双幺出现的百分比:" + (snakeEyeAverage * 100) + "%");
    }
}

关键细节说明

  • 随机数生成:Math.random() * 6会得到[0,6)之间的double值,强转成int后是0-5,加1就变成了骰子的1-6点数,完全符合实际规则。
  • 平均值计算:一定要用(double) snakeEyeCount / TOTAL_ROLLS或者snakeEyeCount / 1000.0,如果直接用整数除法snakeEyeCount / 1000,结果会被截断成整数(比如17/1000会得到0),得不到正确的浮点平均值。
  • 代码可读性:把总次数定义成常量TOTAL_ROLLS,后续如果要修改掷骰子次数(比如改成10000次),只需要改这一个地方就好。

运行这个程序后,你会得到双幺出现的次数和对应的平均值,理论上这个平均值会接近1/36 ≈ 0.0278(也就是约2.78%),因为两个骰子都掷出1的概率是1/6 × 1/6 = 1/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:19:06