Ruby 未定义方法 '[]' for nil:NilClass 循环



基本上,我正在循环一个数组矩阵,将列相加,但它在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(&:+) }

相关内容

最新更新