2016-09-22 79 views
0

我使用下面的代码来生成带有种子的随机数,这样我下次可以生成相同的结果。Java随机数在一天之后种子发生变化

int seed = 100;  
Random rand = new Random(seed); 

我设法返回从程序相同的结果在同一天,但一两天后,我收到了完全不同的结果。我实施随机种子的方式有问题吗?任何人都遇到过这个?

+3

假设你使用'java.util.Random',你描述的是不可能的 - 对于给定的种子(在你的例子中为100),'new Random(seed).nextXxx()'将总是返回相同的数字,以相同的顺序...您可能已经改变了生成序列的种子或代码。 – assylias

+2

这必须是观察错误。同样种子的“随机”产生相同的数字序列;请参阅[JavaDoc](http://docs.oracle.com/javase/8/docs/api/java/util/Random.html)。这是确定性的。你实际上必须竭尽全力从计算机中获得非确定性的随机性。 (编辑:其实,你无法从计算机*中获得它;我所考虑的例子实际上只是从外部源向外输入计算机的随机性,然后再修改为机智,布朗探测器等) –

+1

搜索'新的随机()' - 某处有一个鸡蛋。最有可能的是算法改变了,如果我没有记错的话,一个额外的'random.nextInt(13);'特别是改变'nextInt(12)'到'nextInt(13)'已经改变了后面的数字。 –

回答

3

Javadoc举例:

如果随机的两个实例使用相同的种子创建,并且方法相同的调用序列由对于每个,它们将生成并返回的数字相同的序列。

这真的取决于你如何使用该实例。它必须严格按照您所称的方法进行。

这意味着问题出在调用Random实例上的方法的代码中。调用方法的顺序似乎取决于一些可以改变它的条件。