0

我编写了这个非常简单的代码块,它完成了我所期望的一切——然而,在输出的末尾,我总是收到错误消息“Undefined method `%' for nil:NilClass (NoMethodError)”。这是如何/为什么会出现的,我该如何解决?

def fizzblam

range =* (1..100)
range.each do |i|
if range[i] % 7 == 0 && range[i] % 5 == 0
puts "fizzblam"
elsif range[i] % 7 == 0 && range[i] % 5 != 0
puts "blam"
elsif range[i] % 7 != 0 && range[i] % 5 == 0
puts "fizz"
else puts range[i]
end
end
end

fizzblam
4

1 回答 1

2

的元素range是 1 到 100,但索引range是 0 到 99。该each方法已经为您提供了数组的元素,而不是索引 - 只需i在循环体内使用而不是range[i].

a如果你用a.fetch(i)而不是索引数组,你会得到一个更合理的错误a[i]——前者抛出IndexError而后者给出nil

于 2013-05-05T21:33:13.117 回答