我正在使用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);

}

我想知道是否有一种方法仍可将此算法与递归一起使用,而不出现此错误。

如果不是,那么可以在程序中使用该算法的递归实现的可能性有哪些?

最佳答案

您还必须检查已设置的目标颜色,否则将一次又一次覆盖相同的目标颜色。

07-27 23:35