我正在尝试使用0到4之间的唯一随机数填充ruby中的数组。我正在尝试在a.include上使用if语句?但它不起作用。任何人都可以帮助我理解为什么声明if numbers.include?(new_array_num) == false
似乎不起作用?此外,我正在努力使这项工作没有.shuffle方法。谢谢!
num = 5
counter = 5
numbers = []
while counter >= 0
new_array_num = rand(num)
if numbers.include?(new_array_num) == false
numbers.push new_array_num
counter -= 1
end
end
答案 0 :(得分:2)
rand(num)
正在给你一个0-4的结果。这是5个值:0,1,2,3,4。你试图将值放在计数器值5,4,3,2,1,0。 rand没有足够的值来使其工作。试试counter > 0
或者更好的是:
[0,1,2,3,4].shuffle
# => [3, 2, 4, 0, 1]
答案 1 :(得分:2)
while counter >= 0
需要
while counter > 0
你的循环中充满了范围内的每个可能的随机数,而你又要求它一个,所以循环永远不会结束。
如果您的目的是生成1到x之间所有数字的随机排序数组,请使用(1..x).to_a.shuffle
答案 2 :(得分:0)
我可以建议:
num = 5
counter = 5
numbers = []
while numbers.count < counter
random = rand(num)
numbers << random unless numbers.include?(random)
end
puts numbers
更新
我喜欢使用shuffle的想法,如果你想要它是动态的,你可以使用:
n = 5
(0..n).to_a.shuffle
# => [2, 1, 4, 0, 5]