我需要测试一个 Java 程序 20 次,并且需要设置随机种子,以便可以重复测试。如果我将初始种子设置为 0,然后在每次运行时增加 1(即 1、2、3 等),即使种子相距不远,这种方法是否仍能确保完全随机性?
谢谢
任何种子都将提供与标准PRNG的任何其他种子相同级别的随机性,例如 Java 中包含的。因此,可以使用递增种子进行测试。
不过,您可能需要考虑使用更好的随机数生成器。如果您将值呈现为图像,Java 中包含的一个会产生明显的重复模式(我找不到参考,但我记得它很明显)。我推荐Mersenne Twister(有 Java版本)作为替代方案,它速度快且周期很长,因此您不会轻易看到模式。
如果您使用 0 的种子,则随机数序列将从该点开始重复。如果您想要不同的序列,您只需要使用不同的随机种子。即,您应该能够在每次测试中设置一次种子。
为什么不直接使用当前时间作为种子?即,System.currentTimeMillis()
?
你需要一个数字还是一个字符串?UUID.randomUUID().toString()
当我需要字符串时,我会为我的测试获取一个 UUID,但如果你需要一个数字,那么你可以使用 System.nanoTime()
.