gpt4 book ai didi

java - 为什么这个生成随机数的程序不断生成数百个数字?

转载 作者:行者123 更新时间:2023-11-29 03:13:18 26 4
gpt4 key购买 nike

我有一个关于数组的非常简单的问题。我一直在看一些教程,但不明白为什么下面的代码将频率输出作为 1** 的随机组合。它从不给出 5、67、541 等数字,它总是给出 150、175、183 等数字。我希望我说清楚了。非常感谢!

代码:

    Random rand = new Random();
int freq[] = new int[7];

for(int roll=1; roll<=1000; roll++){

++freq[1+rand.nextInt(6)];
}

System.out.println("Face\tFrequency");

for(int face=1; face<freq.length; face++){
System.out.println(face + "\t" + freq[face]);
}

示例输出:

Face       Frequency

1 176

2 171

3 157

4 159

5 164

6 173

最佳答案

这实际上更像是一道数学题而不是编程题!

掷骰子有六种可能的结果,您掷骰子 1,000 次。这意味着,如果您想要看到一个不是“一百和 X”形式的数字,您需要看到一个数字的 200 或更多,或者一个数字的 99 或更少。您将看到每个数字的预期次数为 1000/6 = 166.7,因此为了看到 200 或更多的数字,您需要偏离真实值 +33.3 或 -66.7。这可能发生;这很不常见。

我编写了一个程序来模拟像这样掷骰子,直到您获得其中一种类型的掷骰并计算您需要掷骰子的次数。这样做 1000 次后,我发现平均而言,您需要掷骰子 53 次才能看到一个不在 100 以内的数字。这是代码:

import java.util.*;

public class DiceRolls {
/* The number of trials to run. */
private static final int NUM_TRIALS = 1000;

public static void main(String[] args) {
Random rand = new Random();

int totalRuns = 0;
for (int i = 0; i < NUM_TRIALS; i++) {
totalRuns += runsUntilEvent(rand);
}
System.out.println(totalRuns / (double)NUM_TRIALS);
}

private static int runsUntilEvent(Random rand) {
/* Track how many tries we needed. */
int numTries = 0;
while (true) {
numTries++;

/* Rather than indexing from 1 to 6, I'm indexing from 0 to 5. */
int freq[] = new int[6];
for(int roll = 0; roll < 1000; roll++){
++freq[rand.nextInt(6)];
}

/* See if this isn't in the hundreds. */
for(int face = 0; face < freq.length; face++){
if (freq[face] >= 200 || freq[face] <= 99) {
return numTries;
}
}
}
}
}

所以您的问题的答案是“您可能会看到它,但这不太可能,您必须多次运行程序才能看到它。”

希望这对您有所帮助!

关于java - 为什么这个生成随机数的程序不断生成数百个数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28057157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com