我正在关注一本书并在此代码中:
Random rand = new Random(47);
int i, j, k;
j = rand.nextInt(100) + 1;
System.out.println("j : " + j);
k = rand.nextInt(100) + 1;
System.out.println("k : " + k);
我在本书的输出中有相同的编号,即:
j : 59
k : 56
如果我使用
Random rand = new Random();
没有47个随机类会产生随机数,这没关系,但是为什么我把数字47放在j = rand.nextInt(100) + 1;
加入的内容为什么我获得了相同的书籍输出?
谢谢
答案 0 :(得分:3)
如果使用相同的种子创建了两个Random实例,并且为每个实例创建了相同的方法调用序列,则它们将生成并返回相同的数字序列。
您可以在constructor
中指定种子使用单个长种子创建一个新的随机数生成器。
答案 1 :(得分:3)
查看地址http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#Random(long)以获取构造函数的文档。基本上,你在构造函数中提出的论点是所谓的" Seed"并用于生成半随机数。如果您在更多应用程序中拥有相同的种子,则会得到相同的结果。
好的做法是使用例如System.currentTimeMillis()
作为参数。
答案 2 :(得分:1)
通常,Random不是真正的随机而是伪随机。这意味着它需要一个给定的种子,并使用它来生成一系列看起来像随机的数字(但是可以预测,如果你把相同的种子重复,它会重复)。