为什么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