2016-12-28 59 views
3

我下面一本书,并在此代码:为什么我用Random Run获得相同的数字?

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

构造函数的参数是[random seed](https://en.wikipedia.org/wiki/Random_seed)。有关更多信息,请参阅[此问题](http://stackoverflow.com/questions/1619627/what-does-seeding-mean)。 – Phylogenesis

+1

因为机器不能随机。通过提供固定的种子,您可以保证一遍又一遍地产生相同的输出。在后台,还需要计算一个随机数。 – SomeJavaGuy

回答

3

documentation

如果随机的两个实例使用相同的种子创建的,方法相同的调用序列的每个制作,他们将生成并返回号码相同的序列。

您可以在constructor

指定种子创建使用单个long种子一个新的随机数发生器。

参见:
Pseudorandom number generator - Wikipedia

+0

所以,籽晶是引导,以实现在所述随机数发生器相同号码。 –

+0

@Lost_in_the_code我不知道你所说的“引导”的意思,但肯定的,种子是什么让你每次都得到相同的号码。 – Arc676

+0

我用“启动”是指启动:) –

1

通常情况下,随机并非真正随机的,但伪。这意味着它需要一个给定的种子,并用它来产生一个看起来像随机的数字序列(但它是可预测的,如果放入相同的种子,它会重复)。