尝试总结数组中的所有数字。 示例10 + 20 + 30应为60。
def sum *arr
i=0
total=0
while i <= arr.count
total += arr[i]
i+=1
end
total
end
puts sum(10,20,30)
为什么我收到此错误。这段代码看起来应该对我有用。我究竟做错了什么?为什么不让它通过它的索引访问数组值?
p8.rb:23:in `+': nil can't be coerced into Fixnum (TypeError)
from p8.rb:23:in `sum'
from p8.rb:29:in `<main>'
答案 0 :(得分:7)
更改
while i <= arr.count
到
while i < arr.count
arr[arr.count]
总是出界。
Fyi写sum
的简短方法是:
def sum *arr
arr.inject(:+)
end
答案 1 :(得分:1)
Matt的回答为您提供了使用注入的规范Ruby方法。但是如果你还没有准备好学习注入,那么至少可以省去手动跟踪数组索引(你的实际问题所在!)的麻烦,方法是使用#each迭代数组:
def sum *arr
total = 0
arr.each do |x|
total += x
end
total
end
puts sum(10,20,30) # => 60
答案 2 :(得分:0)
Matt的答案既光滑又正确,但是您遇到了错误,因为ruby零索引数组。所以如果你改变了计数条件
while i <= arr.count - 1
你的错误会消失