我能用一个捕获器捕获多个try语句吗?在java中

时间:2013-12-05 04:37:51

标签: java try-catch

我正在做一个带有3D数组的项目,我需要测试一个单元格周围的每个单元格。但是,如果单元格位于数组的边缘,则测试数组外部的单元格将抛出超出范围的异常。我想用一个catch语句解决这个问题,但是编写一个try和catch来测试每个块将需要非常大量的代码(3D数组中的单元格周围有8个单元格)。有没有办法捕获许多“尝试”只有一个捕获,然后继续它停止的地方?例如,如果测试器方法测试一个超出范围的单元格,我需要它不仅捕获,而是继续测试其他单元格。

4 个答案:

答案 0 :(得分:4)

我只能猜测:你的代码可能有很多不同的循环,但每个循环的核心非常相似。只需在每个循环中使用相同的方法:

for ... x ...
  do(x);

for ... x ...
  do(x);

for ... x ...
  do(x);

// ...

void do(... x)
{
   try
   {
      // code here
   }
   catch ...
   // ...
}

此外,请注意,您不应通过捕获例外来实施in-bounds检查。这是非常糟糕的设计。确保您的数组访问始终在入站。如果循环条件本身无法达到该目标(例如,因为您的数组不是统一网格),请添加更多if语句。

答案 1 :(得分:1)

另一种解决方案是在需要测试的细胞周围放置一层保护细胞。只测试实际单元的邻居,但是边缘单元将看到保护单元而不是出现越界异常。

答案 2 :(得分:1)

或者,您可以使用if语句检查您是否仍在界限中,如果是,则访问该单元格,否则不会。

答案 3 :(得分:0)

我相信你需要一个循环来测试另一个细胞周围的细胞。你可以做的是,在循环内部写一个try ... catch语句并在它之后给出一个继续

for (/*loop conditions*/) {
    try
    {
        //your code here
    }
    catch (/*catch the IndexOutOfBoundsException here*/)
    {//write any action or message you need to have here}
    continue;
}

这样,无论抛出任何IndexOutOfBounds异常,您的循环都将完全运行。