Random()构造函数参数

时间:2015-03-24 01:50:42

标签: java random constructor random-seed

我试图理解Random()构造函数。我明白,如果我的代码如下:

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

然后rand.nextInt(10)将生成一个0到9之间的随机数,但47传递给Random()构造函数的是什么呢?我发现了一些关于Random作为一个类的wiki,但没有任何关于构造函数如何为我工作的。非常感谢。

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

尝试一遍又一遍地运行程序。每次都会得到相同的输出,直到你将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;
    }
}

另见:

答案 2 :(得分:0)

种子的使用是对随机数序列的更多控制。具有相同种子的不同随机实例将产生相同的随机序列。 种子每次都可以不同,以产生不同的序列