首页  >  文章  >  Java  >  为什么在 Java 的 Random 类中设置种子会返回相同的数字?

为什么在 Java 的 Random 类中设置种子会返回相同的数字?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-06 14:21:03943浏览

Why Does Setting the Seed in Java's Random Class Return the Same Number?

Java 随机数生成:为什么设置种子会返回相同的数字?

尽管将 Random 类的种子设置为特定值,但随机数生成器始终返回相同的数字。让我们探讨一下可能导致此问题的原因。

了解 Random 类和种子初始化

Java Random 类旨在生成伪随机数。默认情况下,它使用其内部时钟作为种子值,使其生成相对可预测的数字序列。要自定义序列,您可以使用 setSeed() 方法显式设置种子。

种子是用于初始化随机数生成器的内部状态的数值。此状态决定生成数字的顺序。

问题:共享随机实例

在提供的代码中,您将在 random() 方法中创建一个新的 Random 实例。这意味着每次调用 random() 时,都会设置一个新种子,从而有效地覆盖之前设置的种子值。

要解决此问题,您需要在整个类中共享 Random 实例。通过创建单个实例并在类初始化时设置一次种子,可以确保一致地生成相同的数字序列。

更新的代码

以下更新的代码解决了该问题:

public class Numbers {
    private Random randnum;

    public Numbers() {
        randnum = new Random();
        randnum.setSeed(123456789);
    }

    public int random(int i) {
        return randnum.nextInt(i);
    }
}

在此更新的代码中:

  1. 声明了一个名为 randnum 的私有字段来表示共享的 Random 实例。
  2. 创建了 Random 实例,并且种子在构造函数中设置,确保种子仅在创建类对象时初始化一次。

通过进行这些更改,您现在在从不同的地方调用 random() 时将获得不同的随机数程序的一部分,同时仍然尊重指定的种子值。

以上是为什么在 Java 的 Random 类中设置种子会返回相同的数字?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn