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)
{
}
}
问问题
121 次
2 回答
4
假设地图完全由零组成,而您位于左上角。你要向右移动一步,然后向左移动一步,然后再向右移动一步,以此类推。
您需要以某种方式标记您已经访问过的单元格,以防止无限递归。
此外,捕获的IndexOutOfBoundsException
不是一个好主意:
- 首先,我不认为它是好的风格:如果稍后你要在
try
块内添加一些也可以 throwIndexOutOfBoundsException
的代码,你的代码将开始默默地失败; - 其次,如果第一个检查 (
map[x1-1][y1]
) 超出范围,您将跳过剩余的检查;
于 2012-05-11T06:15:04.750 回答
-1
可能您尝试访问 -1 索引或长度+1
想想边缘发生了什么
于 2012-05-11T06:16:19.327 回答