随机类表演奇数?

Doo*_*nob 14 java random

在这段代码中:

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)

看起来还不错.

每个好的(伪)随机序列都包含重复数字的条纹,这个条纹以一个开头.

  • nathan,如果在线扑克使用了糟糕的LCG,我会感到震惊. (3认同)

Xio*_*ion 13

Random类生成的值是伪随机的:它们是使用基于种子值的确定性算法创建的.通常(例如,如果使用无参数构造函数),使用当前时间初始化种子,这显然是唯一值.因此,生成了唯一的"随机"序列.

在这里,您使用的是常量种子值,该值不会在代码执行之间发生变化.因此,您总是得到相同的序列.恰好这个序列适用1 1 1 1 1 1 ...于这个特定的种子.


Jim*_*son 5

没有什么可以说1连续10秒的序列是不可能的。给你种子值的人441287210恰好找到了这样一个值,导致1连续10秒开始。如果您继续调用nextInt()(即超过 10 次),您将看到随机值。应该有可能找到将导致其他“明显非随机”序列的其他种子值。