私は再帰呼び出しを使用してシンプルなシードフィルアルゴリズムを実装しています。問題は、その再帰呼び出しでこの例外を投げることです:Javaで再帰呼び出しを使用してシードフィル - Stackoverflowエラー
スレッドの例外「AWT-EventQueueの-0」java.lang.StackOverflowErrorを
私は、わずかなスペースを埋めるためにしようとしていますStackのサイズは問題ではありません。誰かがなぜ例外がスローされているのか理解できますか?
seedfillクラス
package rasterops;
import rasterdata.RasterImage;
import java.awt.*;
import java.awt.image.Raster;
import java.util.List;
import java.util.ArrayList;
import java.util.Optional;
public class SeedFill<PixelType> {
public RasterImage fill(final RasterImage<PixelType> img, final int x, final int y, PixelType borderColor, PixelType fillColor, PixelType bcgColor) {
RasterImage<PixelType> result = img;
PixelType color = (PixelType) img.getPixel(x,y);
if(bcgColor == color || color != borderColor){
result = result.withPixel(x,y, fillColor);
fill(img, x+1, y, borderColor, fillColor,bcgColor);
fill(img, x-1, y, borderColor, fillColor,bcgColor);
fill(img, x, y+1, borderColor, fillColor,bcgColor);
fill(img, x, y-1, borderColor, fillColor,bcgColor);
}
return result;
}
}
fill()メソッドの使用キャンバス
if(tool == 3){
rasterImage = seedfill.fill(rasterImage, e.getX(), e.getY(), 0xffff00, 0x00ff00, 0x2f2f2f);
panel.repaint();
}