2017-02-28 19 views
-3

我想知道为什么每次运行代码时第一列中出现的数字都会发生变化。第二列中的数字将始终相同。 (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); 
} 
+0

在第二列中的数字是不总是相同.... –

+1

@OusmaneDiaw - 我认为OP意味着代码生成值的相同序列中的第二列中的每个时间这个代码运行,而不是第二列填充单个值。 –

+0

@TedHopp我明白了。描述有点困惑,但我现在明白了。 –

回答

3

这是因为用于所述第二列中的Random以恒定123接种,而一个用于第一列具有每次执行代码时间变化的种子。

请注意,由Random产生的值不是真正随机的;他们完全由种子决定。

+0

非常感谢您的回答 – Physics3067

0

的医生说:

创建使用单个long种子新的随机数发生器。种子是内部状态的伪随机数发生器的的初始值是由方法

您已固定在第二发生器的初始状态保持被固定,并且它是从种子的是,下一个随机数字生成。另一方面,如果您使用System.nanoTime()生成种子,您会在每次生成器创建不同的随机数时看到。

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