为什么rand()总是返回相同的数字?
我在用
兰特(200)
在我的Rails应用程序中。 当我在控制台中运行它时,它总是返回随机数,但如果我在应用程序行中使用它:
index = rand(200)
index始终是相同的数字 。
为什么这样以及如何克服这个?
简单的伪随机数生成器实际上生成固定的数字序列。 您获得的特定序列由初始“种子”值决定。 我怀疑你总是以相同的顺序获得第一个数字。 因此,我建议我们在调用rand
之前每次调用srand
来改变序列,从而每次都改变种子值。 文档解释说,当没有参数调用时, srand
根据当前环境(例如时钟上的时间)生成新种子。 因此,你应该得到一个不同的序列,因此有一个不同的随机数:
srand rand(200)
现在,您可能会问 – 为什么总是得到相同的序列? 我不知道! 正如其他人在其中一条评论中所建议的那样,您所看到的行为就是如果您在其他任何地方都有其他代码,那么每次调用srand
具有相同的固定值时会产生的行为。 所以寻找它可能会很好。
尝试Random.rand()
。 例如
Random.rand(200)
或者,如果您正在使用数组,则可以使用sample
。
[*1..200].sample
rand(200)运行一次,并将该值赋给index
变量。 因此’index’将永远是那个数字。
如果您希望更改index
,则需要在其上连续运行rand。
这是一个简单的方法:
def randomIndex(num) index = rand(num) return index end randomIndex(200) => // this value will change