使用实例变量的ruby程序

时间:2014-05-23 05:46:48

标签: ruby class methods instance-variables

我使用基于Chris Pine的Ruby教程的实例变量编程:Link

作业是:

  

制作OrangeTree课程。它应该有一个高度方法   返回它的高度,以及一个oneYearPasses方法,当被调用时,   树木年龄一年。每年树长得更高(无论多少   你认为一棵橙树应该在一年内生长,并在一些数字之后   多年(再次,你的电话)树应该死。对于前几个   多年来,它不应该产生水果,但过了一段时间它应该和我一起   猜测老树每年生产的树比年轻树更多......   无论你认为什么都有意义。而且,当然,你应该是   能够countTheOranges(返回橙色的数量)   tree)和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."
        @fruit = @fruit - @fruitPicked
    end

    def oneYearPasses
        #increase age by 1 each year
        #at the end of each year, all fruits fall off
        if @age >= 0
            @age = @age + 1
            @fruit = @fruit - @fruit    
        end

        #tree keeps growing until it reaches a peak of 20 inches
        if @height >= 0 and @height < 20
            @height = @height + 1
        else
            puts "your " + @tree + " is no longer growing taller."
        end

        #tree starts producing fruit at age 3, each year it will be able to 
        #produce more fruit then subsequent years by multiples of 2
        if @age >= 3
            @fruit = @fruit + (@age * 2)
        end

        #the amount of fruit that is picked
        if @age >= 3
            @fruitPicked = @fruitPicked + @fruitPicked
        end

        if age > 20 and @fruit = 0
            puts "your tree died"
        end
    end
end

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

我有两个问题: 1)当年龄> 1时,为什么橘子树不会死亡? 20和水果= 0?
2)调用我的最后一行orange.pickOrange,我输入2,但我的程序告诉我我挑了20个橙子。这是为什么?

感谢。

1 个答案:

答案 0 :(得分:1)

回答Q1

使用 == 进行比较,而不是 =

并使用@age,这是在课程中使用的实例变量而不是年龄

 if age > 20 and @fruit = 0 should be

 if @age > 20 and @fruit == 0  within method **oneYearPasses**

也许, 20岁以后,水果数量不会为零,它会超过它,所以你应该改变水果的条件

回答Q2

将代码修改为

  @age > 20 and @fruit == 0

我尝试了这个程序,我输入2,程序说,“你选了2个橙子。”

由于