gpt4 book ai didi

java - StackOverflowError 使用特定算法为闭合形状着色

转载 作者:行者123 更新时间:2023-12-01 05:49:08 24 4
gpt4 key购买 nike

我的任务是实现一种算法,从给定的 (x,y) 坐标开始为闭合形状着色,并通过递归调用“扩展”,直到到达形状的边界。到目前为止,这是我想出的:

private void color(int x, int y) {
g2d.draw(new Line2D.Double(x, y, x, y));
if (!robot.getPixelColor(x - 1, y).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x - 1, y);
} else if (!robot.getPixelColor(x + 1, y).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x + 1, y);
} else if (!robot.getPixelColor(x, y - 1).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x, y - 1);
} else if (!robot.getPixelColor(x, y + 1).equals(Color.BLACK) &&
!robot.getPixelColor(x - 1, y).equals(Color.RED)) {
color(x, y + 1);
}
}

Robot 类的 getPixelColor 是我发现获取给定像素颜色的唯一方法(据我所知,另一个方法是 getRGB,但这仅适用于 Image 对象)。据我了解,这应该可行,因为形状的外线肯定是黑色的,并且初始 x 和 y 值来自 MouseListener,因此它们位于形状内部,但是我收到以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at sun.java2d.pipe.BufferedContext.validateContext(BufferedContext.java:110)
at sun.java2d.d3d.D3DRenderer.validateContextAA(D3DRenderer.java:42)
at sun.java2d.pipe.BufferedRenderPipe$AAParallelogramPipe.fillParallelogram(BufferedRenderPipe.java:445)
at sun.java2d.pipe.PixelToParallelogramConverter.drawGeneralLine(PixelToParallelogramConverter.java:264)
at sun.java2d.pipe.PixelToParallelogramConverter.draw(PixelToParallelogramConverter.java:121)
at sun.java2d.SunGraphics2D.draw(SunGraphics2D.java:2336)
at dline.DrawingSpace.color(DrawingSpace.java:87)
at dline.DrawingSpace.color(DrawingSpace.java:93)
at dline.DrawingSpace.color(DrawingSpace.java:90)
at dline.DrawingSpace.color(DrawingSpace.java:93)
at dline.DrawingSpace.color(DrawingSpace.java:90)

(drawingSpace是JPanel的子类)

老师确实告诉我们,这很消耗内存,但它应该是一个有效的算法,所以显然我做错了。任何帮助将不胜感激,谢谢。

最佳答案

您可以尝试增加堆栈大小:How to increase the Java stack size?

可能您的算法存在错误,或者形状太大。如果您在一张方格纸上“画”出您的算法,会有什么帮助呢?这样你就可以检查你的算法。

关于java - StackOverflowError 使用特定算法为闭合形状着色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5157874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com