我正在使用 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);
}
我想知道是否有一种方法仍然可以对该算法使用递归,并且不会出现此错误。
如果不是,该算法有哪些可能的非递归实现,我可以在我的程序中使用?
最佳答案
您还必须检查已经设置的目标颜色,否则您会一次又一次地覆盖相同的目标颜色。
关于java - Flood Fill 算法导致 StackOverFlowError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864019/