3
我正在使用Java編寫一個簡單的繪圖應用程序。我正在嘗試使用Flood Fill算法的遞歸實現作爲我的「桶填充」工具。洪水填充算法導致StackOverFlowError
但是,這個總是給我一個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
@ Jyro117你是什麼意思?你能再解釋一遍嗎? –
那麼除非你的目標顏色等於你的替換顏色,否則我看不出它將如何終止。更改if語句以檢查pixelColor是否等於replacementColor – Jyro117