【发布时间】:2016-09-22 08:10:32
【问题描述】:
我正在使用下面的代码生成带有种子的随机数,以便下次可以生成相同的结果。
int seed = 100;
Random rand = new Random(seed);
我设法在同一天从该程序中获得了相同的结果,但一两天后我得到了完全不同的结果。我实现随机种子的方式有问题吗?有人遇到过这种情况吗?
【问题讨论】:
-
假设您使用
java.util.Random,您所描述的内容是不可能的 - 对于给定的种子(在您的示例中为 100),new Random(seed).nextXxx()将始终以相同的顺序返回相同的数字。 .您可能已经更改了种子或生成序列的代码。 -
这一定是观察错误。
Randoms 具有相同的种子产生相同的数字序列;见the JavaDoc。这是确定性的。实际上,您必须竭尽全力从计算机中获取非确定性随机性。 (编辑:实际上,您无法从计算机中获取它;我所考虑的示例实际上只是从外部源将随机性输入计算机,然后对其进行修改,也就是说,布朗探测器等) -
搜索
new Random()- 某处有一个脏鸡蛋。最有可能是算法改变了,一个额外的random.nextInt(13);特别是把nextInt(12)改成nextInt(13)如果我没记错的话已经改变了后面的数字。 -
无论何时调用,总是得到相同的结果。
-
@kojh 我可以告诉你,你的诊断是不正确的,因为这是不可能的。代码很简单,十多年来没有改变,也没有这样做。代码中没有调用来获取时间。如果发生这种情况,则您的 JVM 中存在错误,我会使用一个可以工作的错误。
标签: java random random-seed