我正在使用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);
}
我想知道是否有一种方法可以在不出现错误的情况下仍然使用递归来实现此算法。
如果没有,那么有哪些可能的非递归实现算法可以在我的程序中使用?
fillRect
只关注mouseLocation
。 - Kevin-Xss
)。另一个(超出范围)是用迭代替换递归。您可以通过检查当前像素是否在被淹没的区域内来改进算法。此外,您可以提供包含访问过的像素的二维数组,并将其与当前像素进行比较。最重要的一点是:stackoverflow.com不是错误!;-) - wypieprz