【发布时间】:2011-05-28 19:49:01
【问题描述】:
在用 Java 制作地图生成器时,我发现他们的随机数生成器存在一个相当令人不安的问题,即当两个 RNG 具有非常相似的种子(以小整数不同)时,它们的第一个输出值将变得非常相似!
示例代码:
Random r = new Random();
long n = 100000; //Choose any number
r.setSeed(n);
System.out.println(r.nextInt());
r.setSeed(n+1);
System.out.println(r.nextInt());
这几乎打破了我对原始 Java RNG 的信心,因为我使用坐标来生成地图生成器。
有人可以建议重新定义 Random.next(int bits) 方法,或针对此问题进行其他修复吗?
感谢您的帮助!
【问题讨论】:
-
你为什么在
r3上打电话给nextInt()?那个RNG是从哪里来的?它与r有某种关系吗? -
.. 为什么在每个值之后更改种子?如果 r3 only 是一个错字
-
@Kaj,说明输出是相似的。
-
所以?那是错误的使用方式。正确使用它,它会按文档说明工作。
-
对不起,我把代码复制错了。它应该是
System.out.println(r.nextInt());另外,我每次都必须在我的应用程序中设置种子,因为动态地图生成器使用坐标来种子。从我的世界中无耻地窃取灵感:P