我正在尝试编写洪水填充,但是递归有任何问题。错误消息msg说:“线程中的异常”AWT-EventQueue-0“java.lang.StackOverflowError ”
这是我的代码:
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();
}
在IDEA中有没有改变XSS的可能性?我在Eclipse中记得就像它一样。( - XSS100M)
currentPixel是canva背景的collor(0x2f2f2f)。
修改 在previousX中,Y是来自侦听器的游标的int位置。
编辑已解决: 问题是当前像素没有采用实际的颜色值。它有const。 0x2f2f2f因此比较是无关紧要的。 :) ..谢谢大家
答案 0 :(得分:0)
要设置arg Xss,在intelliJ中,您可以执行以下操作: 定义运行/调试配置的配置选项
来源: https://www.jetbrains.com/help/idea/setting-configuration-options.html
答案 1 :(得分:0)
增加堆栈大小可能不够,除非是非常小的图像,因此您可能希望改为迭代算法。一个简单的选择是让Deque进入你的坐标,然后将它们拉出来,类似下面的伪代码:
Deque<Point> queue = new ArrayDeque<>();
queue.add(new Point(x, y));
while (!queue.isEmpty()) {
Point pt = queue.poll();
// then do the same thing you were already doing, except use pt.x and pt.y,
// and add new points to the queue instead of recursive calling
}