在 Java 中生成随机数

Random Number Generating in Java

我是编程新手,刚刚开始学习数组,并且一直做得很好,直到我找到一个在其中存储随机数的数组。下面的代码行是最让我困惑的。

for (int roll = 1; roll <=6000000; roll++)
     ++frequency[1 + randomNumbers.nextInt(6)];

在此之前,我导入了 Random class 并创建了一个名为 randomNumbers 的新对象,并将变量频率声明为一个包含 7 个整数的数组。我正在阅读的书告诉我,上面这行掷骰子 600 万次并使用骰子值作为频率指标。

我知道这将迭代 600 万次,每次都按照它在正文中所说的进行操作,但是我在正文中看不到它将任何变量设置为随机数。我认为我最想念的是增加频率[]意味着什么,因为我知道在括号内有一个介于 1 和 6 之间的随机数被添加到 1。因此六百万次迭代应该通过频率 [ 1] 通过 frequency[7] 如果它有机会发生,但即使它通过了它们,我也看不到它如何设置等于这些数组的任何东西。

谁能一步一步地向我解释这行代码?我似乎无法理解它。

那个例程可以分解成这个

for (int roll = 1; roll <=6000000; roll++) {
    int the_random_number = 1 + randomNumbers.nextInt(6);
    frequency[the_random_number] = frequency[the_random_number] + 1;
}

代码randomNumbers.nextInt(6) returns0到5之间的一个数,比如returns3,则加1,所以the_random_number变成4。之后您将 4 的出现频率增加 1 并将其存储在 frequency 数组 (frequency[4] = frequency[4] + 1;).

randomNumbers.nextInt(6)生成一个0-5的数字;加一等于 1-6。 ++ 增加结果数组中对应于所选数字的值。

如果随机数分布是偶数,你应该有一个大约有 100 万个数组。

您也可以尝试Apache Commons Math library's RandomDataGenerator生成随机数。

The Commons Math random package includes utilities for

generating random numbers generating random vectors generating random strings generating cryptographically secure sequences of random numbers or strings generating random samples and permutations analyzing distributions of values in an input file and generating values "like" the values in the file generating data for grouped frequency distributions or histograms

示例

RandomDataGenerator randomData = new RandomDataGenerator(); 
randomData.reSeedSecure(1000);
for (int i = 0; i < 1000; i++) {
    value = randomData.nextSecureLong(1, 1000000);
}
Use these sample as your reference:
import java.util.Random;

/** Generate 10 random integers in the range 0..99. */
public final class RandomInteger {

public static final void main(String... aArgs){
log("Generating 10 random integers in range 0..99.");

//note a single Random object is reused here
Random randomGenerator = new Random();
for (int idx = 1; idx <= 10; ++idx){
  int randomInt = randomGenerator.nextInt(100);
  log("Generated : " + randomInt);
}

log("Done.");
}

private static void log(String aMessage){
System.out.println(aMessage);
}
}