繁体   English   中英

使用Java中的递归调用填充种子-Stackoverflow错误

[英]Seed fill using recursive call in Java - Stackoverflow error

我正在使用递归调用实现一个简单的种子填充算法。 问题在于它在递归调用上引发了此异常:

线程“ AWT-EventQueue-0”中的异常java.lang.StackOverflowError

我正在尝试仅填充较小的空间,因此堆栈大小应该不是问题。 有人可以弄清楚为什么会引发异常吗?

种子填充类

    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;

        }


    }

在Canvas中使用fill()方法

if(tool == 3){
                        rasterImage = seedfill.fill(rasterImage, e.getX(), e.getY(), 0xffff00, 0x00ff00, 0x2f2f2f);
                        panel.repaint();

                    }

我相信您的递归基础案例中有问题。

这是您的if语句: bcgColor == color || color != borderColor bcgColor == color || color != borderColor

这意味着如果bcgColor与颜色相同,则无论borderColor是什么,您都将开始填充。

我想你希望这是bcgColor == color && color != borderColor

因为您想在开始递归之前都知道这两个条件都是正确的,而不是都为false,所以or语句必须为false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM