两个随机陈述之间的差异

时间:2017-02-28 20:58:54

标签: java random

我想知道为什么每次运行代码时第一列中出现的数字都会改变。第二列中的数字将始终相同。 (83 51 77 90 96 58 35 38 86 54)?

 Random randomGenerator = new Random(); 
 Random otherGenerator = new Random(123); 
 for(int i = 0; i < 10; i++) {
     int number1 = 1 + randomGenerator.nextInt(100);
     int number2 = 1 + otherGenerator.nextInt(100); 
     System.out.println("random numbers "+number1+" " +number2);
 }

2 个答案:

答案 0 :(得分:4)

发生这种情况是因为用于第二列的123使用常量Random播种,而第一列中的{{1}}具有每次执行代码时都会变化的种子。

请注意{{1}}生成的值并非真正随机;他们完全由种子决定。

答案 1 :(得分:0)

医生说:

  

使用单个长种子创建新的随机数生成器。种子是伪随机数生成器的初始值,由方法维护

你已经修复了第二个生成器的初始状态是固定的,并且是来自种子的生成下一个随机数。

另一方面,如果您使用System.nanoTime()生成种子,则每次生成器创建不同的随机数时都会看到。

请参阅:https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#Random(long)