我可以用一个catch捕获多个try语句吗?在java中



我正在做一个3D阵列项目,需要测试一个单元周围的每个单元。但是,如果单元格位于数组的边缘,则在数组外部测试单元格将抛出越界异常。我想用catch语句来解决这个问题,但编写一个try-and-catch来测试每个块需要大量的代码(在3D阵列中,一个单元周围有8个单元)。有没有一种方法可以用一次捕获来捕获多次"尝试",然后继续它停止的地方?例如,如果tester方法测试一个越界单元格,我需要它不仅捕获,而且继续测试其他单元格。

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

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

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

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

或者,您可以放置一个if语句来检查您是否仍在边界内,如果是,则访问单元格,否则不访问。

我相信您将需要一个循环来测试另一个单元格周围的单元格。你能做的是,在循环中写一个尝试。。。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异常。

最新更新