2016-02-13 58 views
0
for i in 1..numAthletes 
    randomNum = 0; 
    runningTotal = 0; 

    randomNum = rand(30..89); 
    athleteTimes['swim'] = randomNum; 
    runningTotal += randomNum; 

    randomNum = rand(90..119); 
    athleteTimes['run'] = randomNum; 
    runningTotal += randomNum; 

    randomNum = rand(120..360); 
    athleteTimes['bike'] = randomNum; 
    runningTotal += randomNum; 

    athleteTimes['total'] = runningTotal 

    athleteTotal[i] = athleteTimes; 
end 

當我運行上面的代碼時,我一直得到相同的哈希存儲在後續散列值集。我假設我需要做的事情來重置/重新生成隨機生成器,但我不確定如何在Ruby中執行此操作。在一個循環內保持rand(n1..n2)的相同值

我嘗試使用r = Random.new和使用r.rand(n1..n2)希望這會迫使發電機被重新接種,但它沒有。

回答

4

您在每次迭代中重複使用相同的athleteTimes散列,因此會更改athleteTotal散列中的現有值。

相反,你需要在每次迭代中創建一個新的哈希:

number_of_athletes.times do |i| 
    swim = rand(30..89) 
    run = rand(90..119) 
    bike = rand(120..360) 

    athlete_total[i+1] = { 
    'swim' => swim, 
    'run' => run, 
    'bike' => bike, 
    'total' => swim + run + bike 
    } 
end 

而且你會發現,我用普通的Ruby成語像snakecase變量名,沒有;在年底重新寫你的榜樣一條線。

+0

我一直對這個問題感到厭倦太久,明顯的逃脫了我。這工作真棒。此外,我還能夠將我的'athleteTimes = Hash.new(0);'移到循環中,並修復了它。 – defaultNINJA

+0

非常好。我很高興能夠提供幫助。我建議你儘量遵循常見的[Ruby編碼風格](https://github.com/bbatsov/ruby-style-guide)。你的代碼看起來更像是JavaScript而不是Ruby ... – spickermann

+0

Thanks @spickermann,我在Java,C++,PHP,JavaScript等方面有一個背景。這是我第一次進入Ruby。我會看看你提供的鏈接。 – defaultNINJA

相關問題