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

时间:2012-05-11 06:13:57

标签: java stack-overflow

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)
        {

        }
    }

2 个答案:

答案 0 :(得分:4)

假设地图完全由零组成,您就在左上角。你将向右移动一步,然后向左移动一步,再向右移动一步,依此类推。

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

此外,抓住IndexOutOfBoundsException并不是一个好主意:

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

答案 1 :(得分:-1)

可能您尝试访问-1索引或长度+ 1

想想边缘发生的事情