【发布时间】:2022-01-24 03:13:06
【问题描述】:
def adjacent_sum(arr)
narr = []
arr.each.with_index do |num, index|
narr << (arr[index] + arr[index+1])
end
return narr
end
print adjacent_sum([3, 7, 2, 11])
#=> [10, 9, 13], because [ 3+7, 7+2, 2+11 ]
adjacent_sum([2, 5, 1, 9, 2, 4])
#=> [7, 6, 10, 11, 6], because [2+5, 5+1, 1+9, 9+2, 2+4]
我正在尝试根据用户的输入来修改叙述。基本上试图让所有相邻的数字相加并返回一个新数组。
编写一个方法similar_sum,它接受一个数字数组并返回一个包含原始数组中相邻数字之和的新数组。请参阅示例。
我不熟悉 Ruby 及其思维方式。我不知道该问题使用哪种迭代方法,我知道有很多迭代方法。我可以走老路,只做一个 while 循环,但我想了解 .each 循环的机制。
这是错误信息:
/tmp/file.rb:5:in `+': nil can't be coerced into Integer (TypeError)
from /tmp/file.rb:5:in `block in adjacent_sum'
from /tmp/file.rb:3:in `each'
from /tmp/file.rb:3:in `with_index'
from /tmp/file.rb:3:in `adjacent_sum'
from /tmp/file.rb:10:in `<main>'
【问题讨论】:
-
您确定您正确解释了粗体字的问题陈述吗?你给出的例子是那个声明中提到的例子吗?如果是这样,我会认为问题的陈述措辞不佳,这当然不是你的错。看你的第一个例子,
[3, 7, 2, 11],3有一个相邻的元素,7,所以我认为3的相邻元素的总和是7。7有两个相邻的元素,3和2,它们的和是5,以此类推,导致所需的数组是[7,5,18,2]。 -
是的。谢谢。