有什么区别?我很欣赏C ++的不同之处,因为不更改种子会在重新运行时生成相同的数字集。但是,在Java中似乎并非如此,其中生成的随机数在程序的不同运行中是不同的。那么,为什么有人甚至会使用第二个版本,即new Random(long seed)
?
答案 0 :(得分:0)
设置种子时,您可以预测(并重现)PRNG的输出,
Random r = new Random(1L);
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));
r = new Random(1L);
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));
在我的系统上输出
85,88,47
然后
85,88,47
因为种子已重置 1 。请注意,SecureRandom
具有您描述的行为。
答案 1 :(得分:0)
new Random()
创建一个新的Random
个实例,very likely different,但不能保证来自Random
创建的任何其他实例。
new Random(long seed)
创建一个新Random
实例,该initialize the random number generator实例将pseudorandom number generator,从而确保具有相同种子的两个Random
实例将生成相同的序列。< / p>
由于Random
只是{{3}},因此将它用于需要真正随机数生成器的应用程序是不明智的。但是,对于不需要它的应用程序,或者对于想要预测价值的PRNG用户来说,这并不是一个糟糕的选择。