0

我不断收到我的代码的以下错误消息。(尝试遍历嵌入在数组中的哈希以返回最大值及其关联的键)。错误出现在第一个循环之后。

Traceback(最近一次调用最后一次):6:来自 main.rb:53:in <main>' 5: from main.rb:53:inmap' 4:来自 main.rb:53:ineach' 3: from main.rb:53:in次'2:来自 main.rb:58:in block in <main>' 1: from main.rb:58:ineach' main.rb:60:在block (2 levels) in <main>': undefined method[]' 中为 nil:NilClass (NoMethodError)

#assigns number of participants in array 
num_participants = 2 

#embedded hash within array (of participants)

participants = [{"participant_name"=> "Liz Lee", "cupcakes_sold" => 41, "cupcakes_left" => 31, "cakes_sold" => 12, "cakes_left" => 2}, 
{"participant_name" => "John Jay", "cupcakes_sold" => 44, "cupcakes_left" => 2, "cakes_sold" => 22, "cakes_left" => 4}] 

#calculates total amount raised by each hash in participants array
#and populates new hash key 'proceeds' for each hash in participants array
#then loops through to update most_raised amount and assign highest_earner

counter = 0
most_raised = 0
highest_earner = ""

num_participants.times.map do 

 profits =  2 * participants[0 + counter]['cookies_sold']  - 
 participants[0 + counter]['cookies_left'] - 
 participants[0 + counter]['cookies_sold'] + 
 6 * participants[0 + counter]['cakes_sold'] - 
 3 * participants[0 + counter]['cakes_sold'] - 
 3 * participants[0 + counter]['cakes_left']
 participants[0 + counter]['proceeds'] = profits.to_i
 puts "\nProceeds raised by #{participants[0+counter]['participant_name'].capitalize}: 
 $#{participants[0+counter]['proceeds']}" +"."
 counter+=1

 ['participant_name', 'proceeds'].each do 

  if (max < profits)
   most_raised = participants[0+counter]['proceeds'].to_i
   highest_earner = participants[0+counter]['participant_name']
  end
 end
end

puts "#{highest_earner.capitalize} raised the most:$#{most_raised}"
4

2 回答 2

0

由于您已设置 counter=0 ,因此当您执行参与者[0 + counter] (始终等于参与者[0] )时,您永远不会超过第一个哈希值

我错过了你的柜台+=1 抱歉,这个答案无关紧要。

于 2018-04-26T16:46:46.503 回答
0

解决方案:我分离了我的循环。

#calculates total amount raised by each participant
counter = 0
participants.each do 
  profits =  2 * participants[0 + counter]['cookies_sold']  - 
             participants[0 + counter]['cookies_left'] - participants[0 + counter]['cookies_sold'] + 6 * participants[0 + counter]['cakes_sold'] - 
             3 * participants[0 + counter]['cakes_sold'] - 3 * 
             participants[0 + counter]['cakes_left']
  participants[0 + counter]['proceeds'] = profits.to_i
  puts "\n\e[36mProceeds raised by #{participants[0+counter]['participant_name'].capitalize}:\e[0m $#{participants[0+counter]['proceeds']}" +"."
  counter+=1
end

#calculates highest earner and highest amount raised
counter = 0
most_raised = 0 
highest_earner = ""
participants.each do 
  if (most_raised < participants[0+counter]['proceeds'])
    most_raised = participants[0+counter]['proceeds'].to_i
    highest_earner = participants[0+counter]['participant_name']
    counter+=1
  end
end
puts most_raised 
puts highest_earner
于 2018-04-26T17:09:29.537 回答