Ruby中的随机数生成器问题

时间:2013-06-10 04:12:50

标签: ruby arrays random

我的目的只是用数字从1填充数字到1到1000之间的随机数。然而,在重复运行此代码(大约50次)之后,我得到的最高数字是120 ,只有两次超过100.我的大多数数组都在0到60之间。这种行为对我而言似乎不对。我做错了吗?

my_array = []
i = 0
while i <= rand(1000)
    my_array << i 
    i += 1  
end

puts my_array.count
puts my_array

3 个答案:

答案 0 :(得分:6)

您的功能已损坏,因为您正在检查随机数。这样做:

(0..1000).collect{ rand(1000) }

这将返回一千个随机数的数组。

或者,更接近您的代码:

my_array = []
i = 0
while i <= 1000
    my_array << rand(1000) 
    i += 1  
end

根据评论,你想要的是:

(1..rand(1000))

(1..rand(1000)).to_a

第一个产生一个范围,“更容易随身携带”,第二个产生填充数组。

(编辑)注:

(1..10)具有包容性 - (1..10).to_a == [1,2,3,4,5,6,7,8,9,10]

(1...10)部分排他性 - (1...10).to_a == [1,2,3,4,5,6,7,8,9] - 它不包含数组的结尾,但仍包括开头。

答案 1 :(得分:2)

这听起来像你想要的:

(1...rand(1000)).to_a

答案 2 :(得分:0)

此外,我修改了我的代码以反映我最初想要完成的事情。我的问题是,每次循环我的代码时,我都会生成一个新的随机数。因此,当'i'朝1000增加时,生成的随机数越来越可能低于'i'。我的修复虽然不如我接受的上述解决方案那么优雅,但是在尝试在循环中使用它之前,将随机数存储在变量中。再次感谢。这是修改后的代码:

my_array = []
i = 0
g = rand(1000)
while i <= g
    my_array << i 
    i += 1  
end

puts my_array.count
puts my_array