2014-02-18 124 views
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); 

} 

我想知道是否有仍然使用遞歸這種算法的方式,並沒有得到這個錯誤。

如果沒有,什麼可能非遞歸實現這個算法的在那裏,我可以在我的程序中使用?

+1

它看起來像所有這些奇怪的像素操作都沒有做任何事情,因爲'fillRect'只是看'mouseLocation'。 – Kevin

+0

@ Jyro117你是什麼意思?你能再解釋一遍嗎? –

+0

那麼除非你的目標顏色等於你的替換顏色,否則我看不出它將如何終止。更改if語句以檢查pixelColor是否等於replacementColor – Jyro117

回答