在检查其他人的解决方案后,我的代码似乎与正确答案非常相似。我认为唯一的区别是我定义a
和b
的方式。出于某种原因,它说他们都在NilClass ......?
def product(num)
i = 0
j = 4
arr = num.to_s.scan(/d/).map {|e| e.to_i} #can use .split('') vs .scan
a = (arr[i]..arr[j]).inject(:*) # vs (1) {|product, n| product * n}
while j <= arr.length
b = (arr[i+1]..arr[j+1]).inject(:*)
a = b if b > a
i+=1
j+=1
end
puts a
end
答案 0 :(得分:3)
正则表达式文字/d/
与d
完全匹配。
如果您想匹配数字,则应使用\d
代替。
否则,没有匹配; arr
成为一个空数组。索引空数组总是产生nil
。
arr = []
arr[0] # => nil
答案 1 :(得分:0)
您也遇到阵列索引问题。数组arr
的最后一个索引是arr.length - 1
。但是你的代码:
while j <= arr.length
b = (arr[i+1]..arr[j+1]).inject(:*)
尝试访问数组,直到索引arr.length + 1
。