gpt4 book ai didi

java - 为什么我的代码是 java.lang.StackOverflowError?

转载 作者:行者123 更新时间:2023-11-29 06:00:00 25 4
gpt4 key购买 nike

private void findRute(int x1, int y1, int x2, int y2, int counter)
{
try
{
if((x1 == x2) && (y1 == y2))
{
if(this.min > counter)
{
this.min = counter;
}
}
else
{
if(map[x1-1][y1] == 0)
{
this.findRute(x1 - 1, y1, x2, y2, counter + 1);
}
if(map[x1+1][y1] == 0)
{
this.findRute(x1 + 1, y1, x2, y2, counter + 1);
}
if(map[x1][y1 + 1] == 0)
{
this.findRute(x1, y1 + 1, x2, y2, counter + 1);
}
if(map[x1][y1 - 1] == 0)
{
this.findRute(x1, y1 - 1, x2, y2, counter + 1);
}
}
}
catch(IndexOutOfBoundsException z)
{

}
}

最佳答案

假设 map 完全由零组成,而您位于左上角。您将向右移动一步,然后向左移动一步,然后再向右移动一步,依此类推。

您需要以某种方式标记您已经访问过的单元格,以防止无限递归。

此外,捕获 IndexOutOfBoundsException 也不是什么好主意:

  • 首先,我不认为它是好的风格:如果稍后你要在 try block 中添加一些代码也可能抛出 IndexOutOfBoundsException,你的代码将开始默默地失败;
  • 其次,如果第一个检查 (map[x1-1][y1]) 超出范围,您将跳过剩余的检查;

关于java - 为什么我的代码是 java.lang.StackOverflowError?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546308/

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