在这段代码中:
Random random = new Random(441287210);
for(int i=0;i<10;i++)
System.out.print(random.nextInt(10)+" ");
}
Run Code Online (Sandbox Code Playgroud)
1 1 1 1 1 1 1 1 1 1
每次输出都是.
为什么是这样?不Random
应该......好吧......随机?我认为Random
该类使用System.nanoTime
,所以输出应该是随机的.有人可以解释一下吗?
Dan*_*her 19
让它打印更多,前100个
1 1 1 1 1 1 1 1 1 1 3 4 7 2 2 6 0 3 0 2 8 4 1 6 0 0 0 2 8 2 9 8 9 2 5 2 1 1 4 5 3 4 1 4 1
8 7 6 6 0 6 5 0 4 5 5 6 0 8 3 8 9 7 4 0 9 9 7 7 9 3 9 6 4 5 0 6 3 7 4 9 8 7 6 2 8 9 8 4 4
8 4 9 0 1 6 9 6 1 5
Run Code Online (Sandbox Code Playgroud)
看起来还不错.
每个好的(伪)随机序列都包含重复数字的条纹,这个条纹以一个开头.
Xio*_*ion 13
Random
类生成的值是伪随机的:它们是使用基于种子值的确定性算法创建的.通常(例如,如果使用无参数构造函数),使用当前时间初始化种子,这显然是唯一值.因此,生成了唯一的"随机"序列.
在这里,您使用的是常量种子值,该值不会在代码执行之间发生变化.因此,您总是得到相同的序列.恰好这个序列适用1 1 1 1 1 1 ...
于这个特定的种子.
没有什么可以说1
连续10秒的序列是不可能的。给你种子值的人441287210
恰好找到了这样一个值,导致1
连续10秒开始。如果您继续调用nextInt()
(即超过 10 次),您将看到随机值。应该有可能找到将导致其他“明显非随机”序列的其他种子值。