2014-01-28 52 views
1

我試圖用0和4之間的唯一隨機數在ruby中填充數組。我想在a.include上使用if語句?但它不起作用。任何人都可以幫助我理解爲什麼if numbers.include?(new_array_num) == false似乎沒有工作?另外,我試圖使這個工作沒有.shuffle方法。謝謝!.include?在一個if語句不工作在紅寶石

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 

回答

2

rand(num)是給你0-4的結果。這是5個值:0,1,2,3,4。您試圖將計數器值設爲5,4,3,2,1,0。蘭特沒有足夠的價值來完成這項工作。嘗試counter > 0或許更好,但:

[0,1,2,3,4].shuffle 
# => [3, 2, 4, 0, 1] 
+0

啊哈。我現在明白了。陣列中的插槽太多,沒有足夠的數字進入。謝謝! –

0

願我的建議是:

num = 5 
counter = 5 
numbers = [] 

while numbers.count < counter 
    random = rand(num) 
    numbers << random unless numbers.include?(random) 
end 

puts numbers 

更新。

我喜歡使用洗牌的想法,如果你想它的動態,你可以使用:

n = 5 
(0..n).to_a.shuffle 
# => [2, 1, 4, 0, 5] 
+0

這看起來像是一個完美的解決方案。學到了一些新的語法。感謝亞瑟! –

2
while counter >= 0 

需求是

while counter > 0 

你的循環與每一個可能的隨機數的範圍內填補,而你要求它多一個,所以你的循環永遠不會結束。

如果你的目的是要產生1和x之間的所有數字的隨機排序陣列,使用(1..x).to_a.shuffle

+0

+1實際解釋OP的問題來自哪裏。 –

+0

感謝meagar,這也解決了問題! –