在java中使用泛洪填充填充对象
这是我的问题。我创造了一个四叶三叶草,我想让他充满色彩。 我有一个简单的种子填充(洪水填充):在java中使用泛洪填充填充对象,java,flood-fill,Java,Flood Fill,这是我的问题。我创造了一个四叶三叶草,我想让他充满色彩。 我有一个简单的种子填充(洪水填充): package项目; 类种子填充{ 私有整数宽度; 私人内部高度; 私有int[]画布; 公共种子填充(整数宽度、整数高度、整数[]画布){ 这个。宽度=宽度; 高度=高度; this.canvas=画布; } 公共空白种子填充(整数x,整数y){ 内坐标=3*x+3*y*宽度; 如果(x=高度)返回; if(canvas[coord]==0&&canvas[coord+1]==255&&canvas
package项目;
类种子填充{
私有整数宽度;
私人内部高度;
私有int[]画布;
公共种子填充(整数宽度、整数高度、整数[]画布){
这个。宽度=宽度;
高度=高度;
this.canvas=画布;
}
公共空白种子填充(整数x,整数y){
内坐标=3*x+3*y*宽度;
如果(x<0 | | y<0 | | x>=宽度| | y>=高度)返回;
if(canvas[coord]==0&&canvas[coord+1]==255&&canvas[coord+2]==0)返回;
if(canvas[coord]==255&&canvas[coord+1]==255&&canvas[coord+2]==255)返回;
//颜色
画布[coord]=255;
画布[coord+1]=255;
画布[coord+2]=255;
//递归的
种子填充(x,y-1);
种子填充(x,y+1);
种子填充(x-1,y);
种子填充(x+1,y);
}
}
三叶草的总尺寸为400x400像素
当我运行项目时,它会显示以下错误消息:
线程“AWT-EventQueue-0”java.lang.StackOverflowerr中出现异常
在代码14、30和31行
显然,递归有一个问题,但我不太聪明,不知道如何更改代码来填充那个大对象
谢谢你的建议和帮助 seed\u fill()
为其4个邻居调用seed\u fill()
,为其4个邻居调用seed\u fill()
,为其4个邻居调用seed\u fill()
,以此类推
所以你最终会接到一个没完没了的电话。例如,为(0,1)调用它会调用它(1,1),它会调用它(0,1),它会调用它(1,1),等等。看起来每次调用
seed\u fill
都会为它的每个邻居调用seed\u fill
。因此,如果你在(a,b)
上调用它,并且在(c,d)
上调用它,那么它将再次在(a,b)
上调用它。你得到无限递归。您需要重新安排函数调用和检查以避免这种情况。
package projekt;
class SeedFill {
private int width;
private int height;
private int[] canvas;
public SeedFill(int width, int height, int[] canvas){
this.width = width;
this.height = height;
this.canvas = canvas;
}
public void seed_fill(int x, int y){
int coord = 3*x + 3*y * width;
if( x < 0 || y < 0 || x >= width || y >= height)return;
if(canvas[coord] == 0 && canvas[coord+1] == 255 && canvas[coord+2] == 0)return;
if(canvas[coord] == 255 && canvas[coord+1] == 255 && canvas[coord+2] == 255)return;
//colors
canvas[coord] = 255;
canvas[coord+1] = 255;
canvas[coord+2] = 255;
//recursive
seed_fill(x,y-1);
seed_fill(x,y+1);
seed_fill(x-1,y);
seed_fill(x+1,y);
}
}