范围值不好

时间:2014-01-11 19:23:05

标签: ruby variables loops range

当我运行以下代码时:

def db(y)
  return self % y == 0
end

puts "To number:"
n = gets.chomp

for i in 1..n
  if i.db(3)
    puts "Fizz!"
    if i.db(5)
      puts "FIZZBUZZ!"
    end
  elsif i.db(5)
    puts "Buzz!"
  else
    puts i
  end
end

我收到“范围错误值”错误。为什么会发生这种情况我该怎么办呢?使用某些值的变量的正常范围可以完美地工作,包括for循环,为什么这个不起作用?

注意:我希望for循环保持为for循环。

2 个答案:

答案 0 :(得分:16)

请按以下步骤操作:

n = gets.chomp.to_i

gets.chomp将为您提供String个实例。您需要将其设为Fixnum。否则1.."4"对于例如不是有效范围。所以错误"bad value for range" error. String#to_i是你的朋友。

2.0.0p0 :001 > 1.."2"
ArgumentError: bad value for range
    from (irb):1
    from /home/kirti/.rvm/rubies/ruby-2.0.0-p0/bin/irb:16:in `<main>'
2.0.0p0 :002 > 1..2
 => 1..2 
2.0.0p0 :003 > 

答案 1 :(得分:7)

gets返回String。

您需要使用String#to_i将其转换为Fixnum


替换以下行:

n = gets.chomp

使用:

n = gets.chomp.to_i