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