跳转到内容

随机数

75% developed
来自维基教科书,开放的书籍,开放的世界

导航 语言基础 主题: v  d  e )


要生成随机数,可以使用`Math.random()`方法,该方法返回一个大于等于 0.0 且小于 1.0 的`double`值。

以下代码返回 n 和 m 之间的随机整数(其中 *n <= randomNumber < m*)

Example 代码段 3.30:随机整数。
  int randomNumber = n + (int)(Math.random() * ( m - n ));

或者,`java.util.Random` 类提供了生成随机`boolean`、`byte`、`float`、`int`、`long` 和“高斯分布”的方法(从均值为 0.0、标准差为 1.0 的正态分布中获取`double`值)。例如,以下代码等同于上面的代码

Example 代码段 3.31:带有高斯分布的随机整数。
  Random random = new Random();
  int randomNumber = n + random.nextInt(m - n);

作为使用随机数的示例,我们可以创建一个程序,该程序使用 Random 对象模拟抛硬币 20 次。

Computer code 代码清单 3.25:CoinFlipper.java
import java.util.Random;

public class CoinFlipper {

  public static void main(String[] args) {
    // The number of times to flip the coin
    final int TIMES_TO_FLIP = 20;
    int heads = 0;
    int tails = 0;
    // Create a Random object
    Random random = new Random();
    for (int i = 0; i < TIMES_TO_FLIP; i++) {
      // 0 or 1
      int result = random.nextInt(2);
      if (result == 1) {
        System.out.println("Heads");
        heads++;
      } else {
        System.out.println("Tails");
        tails++;
      }
    }
    System.out.println("There were "
            + heads
            + " heads and "
            + tails
            + " tails");
  }
}
Computer code 代码清单 3.25 的可能输出
Heads
Tails
Tails
Tails
Heads
Tails
Heads
Heads
Heads
Heads
Heads
Heads
Tails
Tails
Tails
Tails
Heads
Tails
Tails
Tails
There were 9 heads and 11 tails

当然,如果您运行该程序,您可能会得到不同的结果。

真正随机的数字

[编辑 | 编辑源代码]

`Math.random()` 和 `Random` 类都生成伪随机数。对于许多应用程序来说,这已经足够好了,但请记住,它不是 *真正* 的随机数。如果您需要更安全的随机数生成器,Java 提供了 `java.security.SecureRandom` 包。`Math.random()` 和 `Random` 类的工作原理是,它们会选择一个“种子”来生成伪随机数。`SecureRandom` 提高了安全性,以确保伪随机数生成器使用的种子是非确定性的——也就是说,您不能简单地将机器置于相同的状态以获得相同的结果集。创建 `SecureRandom` 实例后,您可以像使用 `Random` 类一样使用它。

如果您需要 *真正* 随机的数字,您可以获取硬件随机数生成器或使用随机数生成服务。


Clipboard

待办事项
添加一些练习,类似于 变量 中的练习。


华夏公益教科书