【问题标题】:Java Random Number with seed changes after a day [closed]一天后种子更改的Java随机数[关闭]
【发布时间】: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


【解决方案1】:

引用Javadoc:

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

这实际上取决于您如何使用该实例。它必须与您调用的方法序列完全相同。

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

【讨论】:

    猜你喜欢
    • 2022-06-10
    • 2014-05-30
    • 2016-08-12
    • 1970-01-01
    • 2012-09-09
    • 2014-05-29
    • 2018-01-10
    相关资源
    最近更新 更多