2014-02-18 2 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

답변

관련 문제