我想在两个整数之间生成随机数。在我的情况下,数字必须满足一些其他条件。如果新号码不符合我的条件,我会将generator.nextInt(x)
放入循环并重新设置种子。
当我使用System.currentTimeMillis()
作为种子时,生成的数字与循环迭代次数相同。我将System.currentTimeMillis()
替换为System.nanoTime()
。结果比前一个好得多。
我想知道有没有更好的方法来设置种子?
答案 0 :(得分:11)
您可以使用不带参数的Random
构造函数。该构造函数已经基于System.nanoTime()
初始化其种子。每次调用该构造函数时,种子都会不同。
一般情况下,当你想要一个可重复的随机数据序列(它们是确定的)时,你自己只会Random
种子。
无论哪种方式,您都可以随时调用nextInt
(或任何nextXyz
方法)并不断获取更多随机数,而无需为每个数字重新播种。
Java中的随机数是伪随机数。他们需要一个用于生成下一个随机数的种子。
答案 1 :(得分:4)
如果您反复使用System.currentTimeMillis(),它实际上不会经常更改。即每毫秒一次。如果你使用System.nanoTime(),它可以每微秒或更好地改变。
我怀疑你不需要重置种子,因为序列应该是随机的。只需继续选择随机数字。
答案 2 :(得分:1)
你不需要再次播种。每次执行generator.nexInt(x)
时,都会得到一个新的随机数,即
0< = random_number< X