首页 > 解决方案 > 调酒师挑战,错误 ocde:challange3.rb:64:in `

': nil:NilClass (NoMethodError) 的未定义方法 `+'

问题描述

我试图解决这个非常基本的挑战。在我开始为订单添加总利润并收到错误消息之前,其他一切都运行良好:“challange3.rb:64:in <main>': undefined method +' for nil:NilClass (NoMethodError)”。

挑战三:调酒师挑战

您在一家酒吧工作,那里目前有积压的饮料要制作:

3 杯鸡尾酒、2 杯水和 6 杯啤酒编写了一个程序,询问客户的订单。

如果他们点了鸡尾酒,请在您需要制作的鸡尾酒数量上加一。如果他们点了水,请在您需要制作的水的数量上加一。如果他们点了啤酒,请在您需要倒的啤酒数量上加一。打印最终的饮料订单,以便您知道要做什么。鸡尾酒售价 22 美元,制作成本为 8 美元。啤酒卖 12 美元,倒酒要 3 美元。水的售价为 6 美元,制作成本为 0.15 美元。打印出您的订单的总利润。

这是我的代码

backlog_cocktails = 3
backlog_waters = 2
backlog_beers = 6

cocktail_cost = 8
water_cost = 0.15
beer_cost = 3

cocktail_selling_price = 22
water_selling_price = 6
beer_selling_price = 12

total_profit = " "
p "Are you ordering?"
are_you_ordering  = gets.chomp      

while are_you_ordering == "yes" 
    puts "We have Cocktails, Waters and beers for order."
    puts "What orders do you want to make?"
    customer_order = gets.chomp

    if customer_order == "cocktail"
        backlog_cocktails += 1 
        cocktail_profit = (cocktail_selling_price - cocktail_cost) * backlog_cocktails
    

    elsif customer_order == "water"
        backlog_waters += 1
        water_profit = (water_selling_price - water_cost) * backlog_waters
        
        

    else customer_order == "beer"
         backlog_beers += 1
        beer_profit = (beer_selling_price - beer_cost) * backlog_beers
    
    end
    p "We got cocktail: #{backlog_cocktails}, water: #{backlog_waters} and beer: #{backlog_beers} to make."
    puts "Do you want to make more order?"

    are_you_ordering = gets.chomp 
    
    total_ profit = cocktail_profit + water_profit + beer_profit
    p total_profit
    
end

标签: ruby

解决方案


发生此错误是因为您试图添加到当前nil正在计算的变量total_profit。要修复此错误,请在循环之前将cocktail_profitwater_profit和初始化beer_profit为 0 。while

cocktail_profit = 0.0
water_profit = 0.0
beer_profit = 0.0

while are_you_ordering == "yes" 
    ...

推荐阅读