【问题标题】:ruby program using instance variables使用实例变量的 ruby​​ 程序
【发布时间】:2014-07-12 08:59:43
【问题描述】:

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

作业是:

创建一个 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."
        @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)为什么年龄> 20且果实= 0时,橘子树不死?
2)调用我的最后一行orange.pickOrange,我输入2,但我的程序告诉我我选择了20个橙子。这是为什么呢?

谢谢。

【问题讨论】:

  • 不是你的问题的原因,但你应该(1)不要混合字符串连接和字符串插值,使用后者:puts "your #{@tree} has #{@fruit} oranges.",(2)使用蛇大小写而不是骆驼大小写方法名称,例如pick_orange, (3) 缩进 2 个空格

标签: ruby class methods instance-variables


【解决方案1】:

Q1的回答

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

并使用@age,这是一个在类中使用的实例变量,而不是年龄

 if age > 20 and @fruit = 0 should be

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

也许,20岁以后,水果数不会为零,会比它更多,所以你应该改变那里的水果条件

第二季度的答案

修改代码后为

  @age > 20 and @fruit == 0

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

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2021-07-29
    • 2013-03-24
    • 2011-02-21
    相关资源
    最近更新 更多