gpt4 book ai didi

java - 我应该使用 try/catch 吗?

转载 作者:行者123 更新时间:2023-12-01 23:09:49 24 4
gpt4 key购买 nike

我正在做一些练习题,当前正在解决的问题涉及我不断检查二维数组中的周围值。

我想知道对于此类问题处理越界异常的最佳方法是什么。我应该为我正在检查的每个索引使用 try-catch block 吗?在这种情况下,不会使用 catch 部分,因为如果发生错误,我不想打印任何内容或结束程序。这就是为什么我认为可能有更好的方法来处理这个问题。

这是“索引检查”的一些简化代码

private static void findRoute(String[][] area, int currentRow, int currentCol) {
int row = currentRow;
int col = currentCol;

while (!area[row][col].equals("D")) {
try {
checkRight(area, row, col);
} catch (IndexOutOfBoundsException io) {
//Move on
}

try {
checkLeft(area, row, col);
} catch (IndexOutOfBoundsException io) {
//Move on
}
}
}

因此,例如,如果第一个 try-catch block 导致错误,我希望它移动到下一个 try-catch 以检查下一个值。

但是,如果没有错误,我想检查我使用 try-catch block 的索引处的值。但是如果我在 try-catch 之后添加一条语句来获取 checkRight() 的值,并且抛出 try-catch 中的错误,那么它只会给出我犯了一个错误,程序就会崩溃。

我应该以不同的方式处理这个问题吗?有没有更简单的方法来使用 if-statements 或其他东西来处理这个问题?

最佳答案

一般来说,异常(exception)是指不遵守规则的事物。你期望一些事情,它们应该大部分满足你的期望,但在某些特殊情况下,你的期望没有得到满足。如果你思考一下,你就会发现,由于软件可以有不同的级别,因此较低级别的异常不一定是较高级别的异常,反之亦然。

您在组织代码时犯的主要错误是,您对索引边界的关注是在 findRoute 级别上处理的,而不是在其适当的级别上处理的,即在 checkLeftcheckRight 方法。在 findRoute 级别上,您可能希望有一些边缘情况(字面意思),但是,在 checkLeftcheckRight 级别上,您需要处理这个问题。因此,您应该将所有对边界的关注转移到 checkLeftcheckRight 中。如果您认为处理越界作为日志记录或任​​何其他目的的异常是有值(value)的,那么您可以在这些方法的级别上进行 try-catch,但您应该确保它们能够处理它。例如,您可以将这些方法修改为 boolean 并在 try 末尾返回 true 并在以下位置返回 false catch 的结尾,like

try {
//Do some stuff
return true;
} catch (Exception e) {
//Do some stuff
return false;
}

然后你可以做这样的事情:

checkRight(面积、行、列)|| checkLeft(面积、行、列);

不用担心:如果 checkRighttruecheckLeft 将不会被调用。

关于java - 我应该使用 try/catch 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58381435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com