我正在使用Java编写一个简单的绘画应用程序。我正在尝试使用Flood Fill算法的递归实现作为“存储桶填充”工具。
但是,这总是给我一个StackOverFlowError
。 (无论我使用“桶填充工具”的面积有多小)。
编辑:更改了代码以使其更有效率。还是一样的错误。
这是代码:
public void floodFill(int x, int y, Color targetColor, Color replacementColor) throws AWTException{
pixelColor = robot.getPixelColor(x,y);
g.setColor(replacementColor);
g.fillRect(x, y, 1, 1);
if(robot.getPixelColor(x-1, y).equals(targetColor))
floodFill(x-1, y, targetColor, replacementColor);
if(robot.getPixelColor(x+1, y).equals(targetColor))
floodFill(x+1, y, targetColor, replacementColor);
if(robot.getPixelColor(x, y-1).equals(targetColor))
floodFill(x, y-1, targetColor, replacementColor);
if(robot.getPixelColor(x, y+1).equals(targetColor))
floodFill(x, y+1, targetColor, replacementColor);
}
我想知道是否有一种方法仍可将此算法与递归一起使用,而不出现此错误。
如果不是,那么可以在程序中使用该算法的递归实现的可能性有哪些?
最佳答案
您还必须检查已设置的目标颜色,否则将一次又一次覆盖相同的目标颜色。