我有一个名为GuessingGame的类,其中有一个名为solved?
的方法,它返回游戏的状态。当我运行时,一切都在这里工作。
我正在创建一些测试代码,并希望创建一个循环,直到solve方法返回true:
class GuessingGame
def initialize(answer)
@answer = answer
@solved=false
end
def guess(guess_num)
if guess_num < @answer
@solved=false
:low
elsif guess_num > @answer
@solved=false
:high
elsif guess_num = @answer
@solved==true
:correct
end
end
def solved?
@solved
end
end
不起作用的测试代码:
game = GuessingGame.new(rand(75))
while game.solved? false
puts "Guess a number between 1-75"
guess_num=gets.chomp.to_i
game.guess(guess_num)
end
Ruby不喜欢我的while game.solved? false
并且说我的参数数量错误。
我在这里做错了什么?
我正在使用ruby 2.1.1p76。
答案 0 :(得分:0)
在课堂上你需要:
class GuessingGame
attr_reader :solved
attr_reader
使您能够从外部类本身调用该类实例的属性。
来自API doc:
<强> attr_reader 强>
创建返回实例变量和相应的方法 每个实例变量的值。
从这里你可以这样做:
class GuessingGame
attr_reader :solved
def initialize(answer)
@answer = answer
@solved=false
end
def guess(guess_num)
if guess_num < @answer
@solved=false
:low
elsif guess_num > @answer
@solved=false
:high
elsif guess_num = @answer
@solved=true
:correct
end
end
end
要开始游戏,您只需稍微修改一下代码:
game = GuessingGame.new(rand(75))
until game.solved
puts "Guess a number between 1-75"
guess_num=gets.chomp.to_i
game.guess_num(guess)
end
可以读取until
循环,直到game.solved = true
保持循环。
我认为您对while game.solved? false
的意思是while game.solved == false
。 while game.solved == false
在您的方案中可以正常使用。
在我的示例until game.solved
中与until game.solved == true
相同,只是两种不同的方式来执行相同的操作。希望有所帮助!
答案 1 :(得分:0)
我看看:
elsif guess_num = @answer
应该是:
elsif guess_num == @answer
答案 2 :(得分:0)
@ anthony的解决方案帮助了一下,我能够将测试代码更改为以下直到game.solved?
game = GuessingGame.new(rand(75))
until game.solved?
puts "Guess a number between 1-75"
guess_num=gets.chomp.to_i
game.guess(guess_num)
end
我的类方法使用=而不是==
进行了不正确的比较谢谢!