基本上,我正在循环一个数组矩阵,将列相加,但它在9.times
循环的第二次迭代之前停止。如果我更改y = 1
它将执行该操作并在y = 2
处停止,依此类推。
def new_feature(board)
x=0
y=0
vertical = []
while y < 9
9.times do
vertical << board[x][y]
x += 1
end
puts vertical.reduce(:+)
vertical = []
y += 1
end
end
您永远不会将x
重置回 0,因此在第二次while
迭代中,您的x
以上次完成的位置9
开始,而不是0
。这使得board[9]
,这大概是越界的,因此nil
;然后nil[1]
会使您的代码崩溃。
请注意,您可以编写9.times do |x| ... end
以使x
计数从 0
8
,而无需任何手动计数,因为times
将当前迭代号传递到块中。
此外,一种更 Rubyish 的列求和方式:
board.transpose.map { |row| row.reduce(&:+) }