为什么rand()总是返回相同的数字?

时间:2014-03-05 19:57:33

标签: ruby

我正在使用

  

兰特(200)

在我的Rails应用程序中。 当我在控制台中运行它时,它总是返回随机数,但如果我在应用程序行中使用它:

index = rand(200)

索引总是相同的数字

为什么会这样,以及如何克服这个问题?

3 个答案:

答案 0 :(得分:4)

简单的伪随机数生成器实际上生成一个固定的数字序列。您获得的特定序列由初始“种子”值确定。我怀疑你总是得到相同序列中的第一个数字。因此,我建议我们在每次调用srand之前调用rand来尝试更改序列,从而每次都更改种子值。 docs explain,在没有参数的情况下调用srand时,会根据当前情况(例如,时钟上的时间)生成新种子。因此,你应该得到一个差异序列,因此得到一个不同的随机数:

srand
rand(200)

现在,你可能会问 - 为什么你总是得到相同的序列?我不知道!正如其他人在其中一条评论中建议的那样,您所看到的行为就是如果您在任何地方都有其他代码,可以预期的行为,每次调用{em>相同的固定值srand时间。所以寻找它可能会很好。

答案 1 :(得分:0)

试试Random.rand()。例如

Random.rand(200)

或者,如果您正在使用数组,则可以使用sample

[*1..200].sample

答案 2 :(得分:-1)

rand(200)运行一次,该值将分配给您的index变量。所以'index'将始终是那个数字。

如果您希望更改index,则需要不断对其进行rand运行。

这是一种简单的方法:

def randomIndex(num)
  index = rand(num)
  return index
end

randomIndex(200)
=> // this value will change