0

在 Java 中:

我知道做什么Random.setSeed(long seed);。我知道什么是种子,以及每次使用它会如何变化。我是否需要手动更改种子以确保序列在一段时间后不会重复,或者它使用变量(例如系统时钟)自动操纵种子?

除非我指定种子,否则再次运行相同的程序不会产生相同的结果,因此它必须在构造函数中操作种子,但它是否会定期更改种子(我不是在谈论每次使用时更改种子)?

澄清:

种子随每次使用而变化,但在某些时候,种子会变成构造随机数时的数字。

我需要打电话吗Random.setSeed(System.currentTimeInMillis())?偶尔确保序列在使用后不会重复?

4

3 回答 3

4

这取决于你想要什么。如果我想要“随机”但可重复,那么我有固定的种子。否则,几乎没有理由修复或更换种子。种子的充分理由包括:

  • 测试。因此,随机的特定模式每次都出现相同的情况。
  • 评估。所以不同的测试用例得到相同的值序列,因此可以公平地比较。

如果你真的想改变种子,或者有多个具有独立种子的随机生成器,那么创建新的 Random 对象。

于 2014-11-09T11:07:52.437 回答
1

您不需要Random在创建对象后不断更新它的种子,以保持它“随机”。

于 2014-11-09T11:12:42.273 回答
0

无参数构造函数已经处理好了:

/**
 * Creates a new random number generator. This constructor sets
 * the seed of the random number generator to a value very likely
 * to be distinct from any other invocation of this constructor.
 */
public Random();

如果您想在代码的连续执行中生成相同的伪随机数序列(这对于调试目的很有用),则设置种子(或向构造函数提供种子)很有用。

于 2014-11-09T11:05:16.440 回答