gpt4 book ai didi

java - 使用图形填充颜色时出现 StackOverFlowException - 包含代码

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

我想用蓝色填充一个小程序。我正在使用 Paint(Graphics g) 方法来执行此操作。填充小程序时,8-10 秒后我收到 StackOverFlowException。我想摆脱它。如果我做错了,请建议我该怎么做或纠正我。我问过某人这个问题,他说它存储位置并稍后删除它们,因此堆栈总是几乎为空。请帮助我。

代码:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

public class Flooding extends Applet
{
boolean[][] mark;
boolean justOnce = true;

@Override
public void init()
{
mark = new boolean[800][600];

this.setSize(100, 500);
this.setPreferredSize(new Dimension(100, 500));
this.setVisible(true);
}

@Override
public void start()
{
setBackground(Color.WHITE);
setForeground(Color.BLACK);
}

@Override
public void paint(Graphics g)
{
if(justOnce)
{
super.paint(g);
justOnce = false;
}

for (int row=0; row<500; row++)
{
for (int col=0; col<100; col++)
{
flood(mark, row, col, g);
}
}
}

private static void sleep(int msec)
{
try
{
Thread.currentThread().sleep(msec);
}
catch (InterruptedException e) { }
}

public void flood( boolean[][] mark, int row, int col, Graphics g)
{
if (row < 0) return;
if (col < 0) return;
if (row > 100) return;
if (col > 500) return;

if (mark[row][col]) return;

g.setColor(Color.BLUE);
g.drawLine(row, col, row, col);

mark[row][col] = true;

repaint();
sleep(1);

flood(mark, row - 1, col, g);
flood(mark, row, col, g);
flood(mark, row + 1, col, g);
flood(mark, row-1, col-1, g);
flood(mark, row, col-1, g);
flood(mark, row+1, col-1, g);
flood(mark, row-1, col + 1, g);
flood(mark, row, col + 1, g);
flood(mark, row+1, col + 1, g);
}
}

最佳答案

看看你的代码:第一次调用 flood() 的坐标为 (0, 0),稍后调用 flood() 的坐标为坐标 (1, 0) 调用 flood()... 根据您的维度,您可以达到 500 级深度的递归。将代码更改为不使用递归。

(当然,您可以使用 -Xss 增加堆栈大小,但您的代码已损坏,因此请修复它。)

关于java - 使用图形填充颜色时出现 StackOverFlowException - 包含代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28707873/

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