使用实例变量的橘树的ruby程序

时间:2014-05-23 00:41:23

标签: ruby methods instance-variables

我正在使用Chris Pine的红宝石教程:https://pine.fm/LearnToProgram/?Chapter=09

任务是: 制作OrangeTree课程。它应该有一个返回高度的高度方法和一个oneYearPasses方法,当调用它时,它会使树老化一年。每年树长得更高(无论你认为橙树应该在一年内生长多少),经过一些年(再次,你的召唤),树应该死亡。在最初的几年里,它不应该生产水果,但过了一段时间它应该,而且我想,老树每年生产的比年轻树更多......无论你认为什么都是最有意义的。当然,你应该能够countTheOranges(它返回树上的橘子数)和pickAnOrange(它将@orangeCount减少一个并返回一个字符串,告诉你橘子有多美味,或者只是告诉它你今年没有更多的橘子可供选择了。确保你没有选择一年的橙子在明年之前脱落。

这是我的计划:

class OrangeTree

    def initialize
        @tree = "orange tree"
        @age = 0
        @height = 0
        @fruit = 0
        @fruitPicked = 0
        puts "your " + @tree + " is budding"
    end

    def age
        puts "your " + @tree + " is #{@age} years old."
        @age = @age
        oneYearPasses
    end

    def height
        puts "your " + @tree + " is growing taller."
        @height = @height
    end

    def fruit
        puts "your " + @tree + " has #{@fruit} oranges."
        @fruit = @fruit
    end

    def pickOrange
        puts "pick how many oranges?"
        @fruitPicked = @fruitPicked + gets.chomp.to_i
        puts "you picked #{@fruitPicked} oranges."
    end


    def oneYearPasses
        if @age >= 0
            @age = @age + 1
        end

        if @height >= 0 and @height < 20
            @height = @height + 1
        else
            puts "your " + @tree + " is no longer growing taller."
        end

        if @age >= 3
            @fruit = @fruit + (@age * 2)
        end


        if @age >= 3
            @fruitPicked = @fruitPicked + @fruitPicked
            @fruit = @fruit - @fruitPicked
        end
    end
end

orange = OrangeTree.new
orange.age
orange.age
orange.age
orange.age
orange.age
orange.fruit
orange.pickOrange
orange.fruit

我的问题是为什么我的实例变量@fruit没有扣除@fruitPicked的数量? orange.fruit不断输出树木生长的橙子数量。感谢。

1 个答案:

答案 0 :(得分:0)

因为在调用方法oneYearPasses时会扣除@fruit。 所以,如果你想在每次调用@fruitPicked时计算@fruit,也许你应该这样做。

def pickOrange
    puts "pick how many oranges?"
    @fruitPicked = @fruitPicked + gets.chomp.to_i
    puts "you picked #{@fruitPicked} oranges."
    @fruit = @fruit - @fruitPicked
end

输出将是:

orange = OrangeTree.new

你的橘子树正在萌芽

orange.age

你的橘子树已经0岁了。

orange.age

你的橘子树已经1岁了。

orange.age

你的橘子树已经2岁了。

orange.age

你的橘子树已经3岁了。

orange.age

你的橘子树已经4岁了。

orange.fruit

你的橘子树有24个橘子。

orange.pickOrange

选择了多少橘子? 4

你选了4个橘子。

orange.fruit

你的橘子树有20个橘子。