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
我正在尝试了解 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