我试图进行填充,要求用户输入从随机生成的数组的右上角开始,该数组填充了数字1-6,用“颜色”表示。我刚刚添加了oldColor / newColor功能,我收到错误消息,我不确定原因。除此之外,算法继续要求输入而不打印每个步骤中新的填充填充的样子。
def floodfill(array_1, row, column, colours, oldColor, newColor)
#colours is an array of the 6 colours i'm going to be using
boxHeight = array_1.length
boxWeight = array_1[0].length
oldColor = array_1
#puts oldColor
print "> "
newColor = gets.chomp.downcase
if array_1[row][column] != oldColor
return
if newColor == "r"
newColor = colours[:red]
array_1[row][column] = newColor
floodfill(array_1, row + 1, column, colours, newColor) # right
floodfill(array_1, row - 1, column, colours, newColor) # left
floodfill(array_1, row, column + 1, colours, newColor) # down
floodfill(array_1, row, column - 1, colours, newColor)# up
print_it
else
puts "didnt get that"
array_1.each do |row|
row.each do |c|
print c
end
puts
end
end
end
end
floodfill(array_1,14,9,colours,0,0)
我无法直接发布图片,但这是我的输出当前的样子然后是失败消息 http://imgur.com/a/88UrK
答案 0 :(得分:1)
这会使代码执行短路:
if array_1[row][column] != oldColor
return
一旦点击return
,它就会从方法中返回nil
,并且不会评估任何其他内容。
boxHeight
和boxWeight
永远不会被初始化,newColor
会被gets
覆盖,这可能不会发生。
最后,代码缺少尾随end
。我建议使用工具自动重新格式化或重新编写代码,这将有助于避免此类问题。
答案 1 :(得分:0)
Ruby if语句在C或Java中不起作用,您可以在其中编写类似
的内容if array_1[row][column] != oldColor
return
您需要end
,或者需要在之后放置if 。
if array_1[row][column] != oldColor
return
end
# or
return if array_1[row][column] != oldColor