Random() 构造函数参数

Random() constructor parameter

我正在尝试了解 Random() 构造函数。我知道如果我有这样的代码:

Random rand = new Random(47);
System.out.println(rand.nextInt(10));

那么rand.nextInt(10)会生成一个0到9之间的随机数,但是传递给Random()构造函数的47有什么作用呢?我找到了一些关于 Random 作为 class 的 wiki,但没有任何内容说明构造函数如何为我工作。非常感谢。

尝试一遍又一遍地运行您的程序。每次都会得到相同的输出,直到将 47 更改为其他值,然后每次 运行.

都会得到不同的结果

为什么需要随机种子?计算机从复杂的数学运算中生成随机数,使结果看起来随机。

以下是 Random 的粗略工作方式:

class Random {
    int seed;

    // initial condition of the random number generator
    public Random(int seed) { this.seed = seed; }

    public int nextInt(int range) {
        // some complicated formula to find out the next number
        int nextNumber = ... seed ... ;
        // update state of random number generator
        seed = nextNumber;


        return nextNumber % range;
    }
}

另请参阅:

Random 构造函数参数是内部伪随机数生成器的种子或起点。如果用相同的种子构造两个 Random 对象,它们将生成相同的伪随机数序列。

为了解决这个问题,构造你的 Random 对象传递 new Date().getTime() 作为参数。这将确保您每次都获得不同的序列(当代码执行间隔超过 1 毫秒时)。

seed的使用是为了更好的控制随机数序列。具有相同种子的不同随机实例将产生相同的随机序列。 seed每次可以不同,生成不同的sequence