在我的代码中,我将在try-block中尝试某个任务。如果抛出异常,catch-blocks将纠正遇到的错误(通常会提示输入正确)。之后,该程序应该重复尝试,直到成功。我目前的代码如下:
for (bool isSuccess = false; !isSuccess;) {
try {
...
isSuccess = true;
}
// catch blocks here to correct any exceptions thrown
}
可以看出,我目前正在使用循环结构来使try-catch块在try块失败时重新开始,直到try块完全成功。有更优雅的解决方案吗?
答案 0 :(得分:8)
我更喜欢看到默认退出的do
循环(然后遇到无限循环的可能性较小)。您对boolean
类型的使用仅限于break
和continue
的行为。作为替代方案,也许更自然的方式,考虑
do {
try {
// some code
} catch (/*whatever*/){
continue; // go again
}
break;
} while (true);
答案 1 :(得分:3)
只是为了给你一个替代方案,如果你的代码允许你这样做,那么你也可以使用递归。但在我看来,与其他解决方法相比,这种做法并不那么有利。
public void doSomething() {
try {
...
} catch(Exception e) {
doSomething();
}
}
答案 2 :(得分:0)
您可以简单地使用while循环。
while(!isSuccess){
try{
//DO Stuff
}
}
答案 3 :(得分:0)
我认为您应该定义最多的尝试次数。否则,在最糟糕的情况下,当所有失败发生时,您的应用程序将被冻结。
答案 4 :(得分:0)
您可以使用while
循环
boolean isSuccess = false;
while(!isSuccess) { // loop till to isSuccess become true
try {
....
isSuccess = true;
} catch (Exception e) {
// Some Exception accrued, you can have 2 options
// 1. break the loop with break;
// 2. continue the process
}
}
答案 5 :(得分:0)
您也可以使用递归来执行此操作。但我认为这不会有效。做......虽然这是最好的方法。