【问题标题】:Boolean determined by whether or not an exception is thrown?由是否抛出异常决定的布尔值?
【发布时间】:2019-09-21 22:39:32
【问题描述】:

我正在尝试检查围绕某个数组索引的对象值。例如,在一个 5 X 5 的数组中,第 3 行第 3 列被选中,那么代码会检查:

1 1 1 1 1

1 1 1 1 1

1 1 秒 1 1

1 1 1 1 1

1 1 1 1 1

其中 s 是数组中的选定值,加粗的 1 是代码检查的值。

在某些边缘情况下,例如左上角 1,可能会抛出 ArrayOutOfBoundsExceptions。 是否可以这样编写代码:

while(anExceptionIsNotThrown):
   check surrounding value

【问题讨论】:

  • 那是错误的代码编写方式。例外应该是针对特殊情况的。你知道数组有边界,所以在尝试访问它之前检查它们,而不是每次靠近边缘时都无缘无故进入缓慢的异常缠绕模式。
  • 如果需要,在 java 中处理异常的唯一方法是使用 try catch 块
  • 没有代码,因此提供有意义的帮助的方式为零。听起来你不恰当地使用了异常——依赖它们而不是简单地使用长度。请参阅有关如何提问的常见问题解答 - 此问题不完整。

标签: java exception boolean


【解决方案1】:
boolean failed = false;
while (!failed){
    try{
        //code that maybe throws an exception
    } catch (ArrayOutOfBoundsException e){
        failed = true;
    }
}

如果抛出异常,失败标志将设置为 true,从而指示 while 循环停止。 使用break 语句的另一种解决方案:

while (true){
    try{
        //code that maybe throws an exception
    } catch (ArrayOutOfBoundsException e){
        break;
    }
}

但是:while (true) 绝不是一个好主意,因此请将其替换为您自己的三行/列条件(在第一个示例中也使用 &&)。

虽然我的解决方案可行,但我完全同意 Joseph Sible 的评论,即您应该检查数组边界而不是等待抛出异常

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    相关资源
    最近更新 更多