【问题标题】:ruby program for orange tree using instance variables使用实例变量的橙树红宝石程序
【发布时间】:2014-07-12 05:28:55
【问题描述】:

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

任务是: 创建一个 OrangeTree 类。它应该有一个返回其高度的 height 方法和一个 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 不断输出树生长的橙子数量。谢谢。

【问题讨论】:

  • 一年过后,您将fruit_picked 加倍,您应该将其设置为零,并且您的fruit 方法应该返回fruit -fruit_picked。提示,现在您已经掌握了一些基本的 rubies :),侧身看一下 rspec(或其他单元测试框架,如果您愿意的话)并看一下 TDD,它会真正帮助您完成这个练习。
  • 或者你可以让水果保持原样,然后执行 count_the oranges,这将是水果 -fruit_picked。

标签: ruby methods instance-variables


【解决方案1】:

因为调用 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

输出将是:

橙色 = OrangeTree.new

你的橘子树发芽了

橙子年龄

你的橘子树已经 0 岁了。

橙子年龄

你的橘子树已经 1 岁了。

橙子年龄

你的橘子树已经 2 岁了。

橙子年龄

你的橘子树已经 3 岁了。

橙子年龄

你的橘子树已经 4 岁了。

橙子.水果

你的橘子树有 24 个橘子。

orange.pickOrange

摘几个橙子? 4

你摘了 4 个橙子。

橙子.水果

你的橘子树有 20 个橘子。

【讨论】:

  • 谢谢,我很想把推论放在 pickOrange 方法中,但是我真的希望能够把它放在 oneYearPasses 方法中。有没有办法做到这一点?
  • 在我看来,如果我们想使用 oneYearPasses 来计算金额是不可能的。而对于实际情况,橙子的数量应该在采摘后立即扣除。否则你必须在一年后计算
猜你喜欢
  • 1970-01-01
  • 2010-12-18
  • 2017-04-01
  • 1970-01-01
  • 2018-04-10
  • 2011-01-25
  • 1970-01-01
  • 2013-10-19
  • 2010-09-28
相关资源
最近更新 更多