我正在做一个带有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异常。