我正在尝试围绕多维数组中的现有对象创建对象。它似乎可行,但会产生以下说明的问题。
// neither of these seem to have an effect on touch/pointer events
button.disabled = true;
button.setAttribute('disabled', 'disabled');
此代码在大多数情况下都有效,如果在最后一个数组的最后一个索引上添加一个,则会引发错误;如果在其他数组的最后一个索引上放置1,则还会添加一个额外的1。
class Image
def initialize(pixle)
@pixle = pixle
end
def output_image
@pixle.each do |row|
puts row.join("")
end
end
def find_ones
ones = []
@pixle.each_with_index do |row, i|
row.each_with_index do |val, j|
if val == 1
ones << [i, j]
end
end
end
ones.each do |i, j|
@pixle[i][j - 1] = 1 unless j == 0
@pixle[i][j + 1] = 1 unless j == -1
@pixle[i - 1][j] = 1 unless i == 0
@pixle[i + 1][j] = 1 unless i == -1
end
output_image
end
end
image = Image.new([
[1, 0, 0, 0],
[0, 0, 0, 1], #this one adds extra one outside array
[0, 0, 0, 0],
[0, 0, 0, 1] #if last index is 0 it works
])
image.find_ones
答案 0 :(得分:1)
我认为问题出在这里:
@pixle[i][j + 1] = 1 unless j == -1
@pixle[i + 1][j] = 1 unless i == -1
i
是行,j
是找到一个的列。
必须针对矩阵的行数和列数测试i
和j
,以避免在边界上添加额外的点。
如果更改为
@pixle[i][j + 1] = 1 unless j == 3
@pixle[i + 1][j] = 1 unless i == 3
它按预期工作。 更笼统地说,您应该选择矩阵的大小并在您的陈述中使用它,例如
@rows = pixle.size
@cols = pixle[0].size
因此,由于我们需要考虑索引,因此它可能变为:
@pixle[i][j + 1] = 1 unless j == @cols -1
@pixle[i + 1][j] = 1 unless i == @rows - 1