3

我想在两个整数之间生成随机数。在我的情况下,数字必须满足其他一些条件。generator.nextInt(x)如果新号码不符合我的条件,我会循环并再次设置种子。

System.currentTimeMillis()当我用作种子时,生成的数字与循环迭代次数相同。我替换System.currentTimeMillis()System.nanoTime(). 结果比上一个好很多。

我想知道有没有更好的方法来设置种子?

4

3 回答 3

11

您可以使用Random不带参数的构造函数。该构造函数基于System.nanoTime()已经初始化其种子。每次调用该构造函数时,种子都会不同。

Random通常,只有在需要可重复的随机数据序列(它们是确定性的)时,您才会自己播种。

无论哪种方式,您始终可以继续调用nextInt(或任何nextXyz方法)并不断获得更多随机数,而无需为每个数字重新播种。

Java中的随机数是伪随机的。他们需要一个用于生成下一个随机数的种子。

于 2013-06-19T21:33:59.107 回答
4

如果您反复使用 System.currentTimeMillis() 它实际上不会经常更改。即最多每毫秒一次。如果您使用 System.nanoTime() 它可以改变每微秒或更好。

我怀疑您不需要重置种子,因为序列应该是随机的。只是继续选择随机数。

于 2013-06-19T21:38:05.867 回答
1

您无需再次播种。每次你这样做generator.nexInt(x)你都会得到一个新的随机数,即

0 <= 随机数 < x。

于 2013-06-19T21:35:06.473 回答