我想知道为什么每次运行代码时第一列中出现的数字都会改变。第二列中的数字将始终相同。 (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 :(得分:4)
发生这种情况是因为用于第二列的123
使用常量Random
播种,而第一列中的{{1}}具有每次执行代码时都会变化的种子。
请注意{{1}}生成的值并非真正随机;他们完全由种子决定。
答案 1 :(得分:0)
医生说:
使用单个长种子创建新的随机数生成器。种子是伪随机数生成器的初始值,由方法维护
你已经修复了第二个生成器的初始状态是固定的,并且是来自种子的生成下一个随机数。
另一方面,如果您使用System.nanoTime()
生成种子,则每次生成器创建不同的随机数时都会看到。
请参阅:https://docs.oracle.com/javase/7/docs/api/java/util/Random.html#Random(long)