为什么我使用Random Run获得相同的数字?

时间:2016-12-28 11:24:10

标签: java math random

我正在关注一本书并在此代码中:

    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;加入的内容为什么我获得了相同的书籍输出? 谢谢

3 个答案:

答案 0 :(得分:3)

来自documentation

  

如果使用相同的种子创建了两个Random实例,并且为每个实例创建了相同的方法调用序列,则它们将生成并返回相同的数字序列。

您可以在constructor

中指定种子
  

使用单个长种子创建一个新的随机数生成器。

另见:
Pseudorandom number generator - Wikipedia

答案 1 :(得分:3)

查看地址http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#Random(long)以获取构造函数的文档。基本上,你在构造函数中提出的论点是所谓的" Seed"并用于生成半随机数。如果您在更多应用程序中拥有相同的种子,则会得到相同的结果。

好的做法是使用例如System.currentTimeMillis()作为参数。

答案 2 :(得分:1)

通常,Random不是真正的随机而是伪随机。这意味着它需要一个给定的种子,并使用它来生成一系列看起来像随机的数字(但是可以预测,如果你把相同的种子重复,它会重复)。