我写了一个程序来模拟多面体骰子的滚动,但每次运行它都会得到如下所示的错误。它显示我的提示并让我输入我的数字,但之后它会搞砸了。我一直试图在网上找到一个修复但我只发现人们在讨论times
方法未定义的不同问题。我是Ruby的新手,所以任何帮助都会受到赞赏。
我的计划:
p = 0
while p < 1
puts "Choose your die type"
die_type = gets.chomp
puts "Choose your number of die"
die_number = gets.chomp
total = 0
i = 1
die_number.times do
random_int = 1 + rand(die_type)
total += random_int
i += 1
end
puts total
end
我得到的错误:
/dieroll.rb:13: undefined method 'times' for "5":String (NoMethodError)
答案 0 :(得分:2)
将die_number = gets.chomp
更改为die_number = gets.to_i
。 die_number = gets.chomp
,为本地变量die_number
指定一个字符串(因为Kernel#gets
为我们提供了一个字符串对象)。 String
没有任何名为#times
的方法,而Fixnum
类具有该方法。
将die_type = gets.chomp
更改为die_type = gets.to_i
,以避免等待您的下一个错误,一旦您修复第一个错误。
1.respond_to?(:times) # => true
"1".respond_to?(:times) # => false
在您的情况下,die_number
为"5"
,因此您的尝试"5".times
将错误提升为未定义的方法'次'为“5”:字符串(NoMethodError)