繁体   English   中英

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

[英]Can i catch multiple try statements with one catch? in java

我正在做一个带有3D阵列的项目,我需要测试一个单元周围的每个单元。 但是,如果单元格位于阵列的边缘,则在阵列外部测试单元格将引发超出范围的异常。 我想用catch语句解决此问题,但是编写一次try and catch以测试每个块将需要大量代码(3D数组中的一个单元周围有8个单元)。 有没有一种方法可以只捕获一个就可以捕获许多“尝试”,然后继续从中断的地方继续呢? 例如,如果测试器方法测试了一个超出范围的单元格,那么我不仅需要捕捉它,还需要继续测试其他单元格。

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

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

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

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

// ...

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM