홍수 채우기를 프로그래밍하려고하지만 재귀에 문제가 있습니다. 오류 MSG는 말한다 :Floodfill StackOverFlow, IDEA
public class FillerSeedFill<PixelType> {
public RasterImage<PixelType> filler (RasterImage<PixelType> img,
int x, int y,
PixelType newPixel,
PixelType borderPixel,
PixelType currentPixel
){
RasterImage<PixelType> result = img;
if (borderPixel != currentPixel){
if(currentPixel!=newPixel) {
result = result.withPixel(x, y, newPixel);
filler(img,x+1,y,newPixel,borderPixel,currentPixel);
filler(img,x-1,y,newPixel,borderPixel,currentPixel);
filler(img,x,y+1,newPixel,borderPixel,currentPixel);
filler(img,x,y-1,newPixel,borderPixel,currentPixel);
return result;
}
}
return result;
}
}
과 캔버스 :
if(jComboBoxSelectColoring.getSelectedIndex()==0){
System.out.println("Seed fill");
int currentPixel = 0x2f2f2f;
System.out.println(currentPixel);
fillerSeedFill.filler(rasterImage,
previousX,previousY,
0xC4D4AF,
0x8AC249,
currentPixel);
System.out.println(previousX+" "+previousY);
panel.repaint();
}
"예외 스레드에서"AWT-EventQueue의-0 "java.lang.StackOverflowError의이"여기
내 코드입니다 IDEA에서 XSS를 변경할 수 있습니까? 나는 이클립스에서 기억하고있다. (-XSS100M)currentPixel은 canva의 배경색 (0x2f2f2f)의 collor이다.
편집 : 이전 X에서 Y는 청취자의 커서 위치를 나타냅니다.
수정 됨 : 문제는 현재 픽셀이 실제 색상 값을 사용하지 않았 음을 나타냅니다. const가 있습니다. 0x2f2f2f 비교는 비논리적이었습니다. :) .. 감사합니다 모두
문제 : 하나의 간단한 옵션을 사용하면 좌표를 채우고있는에 Deque와를하는 것입니다, 다음, 다음 의사 코드 같은 것을 꺼내십시오 귀하의 스택이 오버플로 될 때까지 메서드를 호출하는 것보다 –
괜찮습니까? 그래서 어떻게 수정해야하는지 알고 계십니까? ... 모든 재귀 호출 전에 조건을 추가해야합니까? @ maytham-ɯɐɥʇʎɐɯ – pajasv