数组 – 仅在索引存在时编辑索引
发布时间:2020-12-16 21:05:11 所属栏目:百科 来源:网络整理
导读:我需要创建一个0和1的2D网格来表示图像,并创建一个模糊方法,将1(左,右,上或下)旁边的任何0更改为1,如下所示: 0000 = 00000000 00100010 01110000 0010 接下来,我必须允许用户传入一个允许模糊在每个方向上扩展多个空格的数字.如果我调用image.blur(2),它会
|
我需要创建一个0和1的2D网格来表示图像,并创建一个模糊方法,将1(左,右,上或下)旁边的任何0更改为1,如下所示:
0000 => 0000 0000 0010 0010 0111 0000 0010 接下来,我必须允许用户传入一个允许模糊在每个方向上扩展多个空格的数字.如果我调用image.blur(2),它会在每个方向上扩展2个空格,但每个第一步都必须再次调用模糊以考虑对角线.例如: 00000000 => 00010000 00000000 00111000 00010000 02222200 00000000 00111000 00000000 00010000 这是我的代码. class Image
attr_accessor :picture
def initialize(*rows)
@picture = *rows
end
def output_image
@picture.each_index do |i|
puts @picture[i].join
end
end
def blur(distance=1)
@blurred_image = Array.new(@picture.length,0) {Array.new(@picture[0].length,0)} #create new array of zeroes the size of @picture
@picture.each_index do |i|
@picture[i].each_index do |j|
if @picture[i][j] == 1
@blurred_image[i][j] = 1 if @blurred_image[i][j]
@blurred_image[i][j-1] = 1 if @blurred_image[i][j-1]
@blurred_image[i][j+1] = 1 if @blurred_image[i][j+1]
@blurred_image[i-1][j] = 1 if @blurred_image[i-1][j]
@blurred_image[i+1][j] = 1 if @blurred_image[i+1][j]
end
end
end
if distance > 1
@picture = @blurred_image #save progress of image blur in @picture so we can continue in recursive call
blur(distance-1) #iterate as long as distance > 1
elsif distance == 1 #necessary so blurred image isn't printed 'distance' times
@blurred_image.each_index do |i|
puts @blurred_image[i].join
end
end
end
end
pic = Image.new(
[0,0],[1,[0,1,0]
)
pic.blur(3)
我的函数可以正常工作,但前提是1不超出数组的范围.如果我在角落放一个1,看起来我的函数试图编辑一个不存在的索引的值,我得到以下消息: image_blur.rb:28:in `block (2 levels) in blur': undefined method `[]' for nil:NilClass (NoMethodError) from image_blur.rb:22:in `each_index' from image_blur.rb:22:in `block in blur' from image_blur.rb:21:in `each_index' from image_blur.rb:21:in `blur' from image_blur.rb:35:in `blur' from image_blur.rb:35:in `blur' from image_blur.rb:47:in `<main>' 我试图告诉它只在索引存在的情况下将1分配给索引.我很感激任何帮助. 解决方法
在您检查一个级别之前,您似乎正在尝试检查两个级别.
例如,图片[1]可能不存在……所以如果你试图检查图片[i] [j]它就会失败. 您可以在索引之前尝试检查每个级别是否存在… if @picture[i] && @picture[i][j] && @picture[i][j] == 1
if @blurred_image[i].present?
@blurred_image[i][j] = 1 if @blurred_image[i][j]
@blurred_image[i][j-1] = 1 if @blurred_image[i][j-1]
@blurred_image[i][j+1] = 1 if @blurred_image[i][j+1]
end
@blurred_image[i-1][j] = 1 if @blurred_image[i-1] && @blurred_image[i-1][j]
@blurred_image[i+1][j] = 1 if @blurred_image[i+1] && @blurred_image[i+1][j]
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
