2016-02-13 4 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

Благодаря @spickermann, у меня есть основа в Java, C++, PHP, JavaScript и т. Д. Это мой первый провал в Ruby. Я посмотрю ссылку, которую вы предоставили. – defaultNINJA

Смежные вопросы