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.
相关产品推荐
相关产品推荐

