【发布时间】: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