我有以下代码:
dist[i - 1][j] = i - 1 >= 0 ? findDist(matrix, i - 1, j, rowNum, colNum, dist) : 0;
我得到了java.lang.ArrayIndexOutOfBoundsException: -1
所以我必须将代码更改为:
if (i - 1 >= 0) {
dist[i - 1][j] = findDist(matrix, i - 1, j, rowNum, colNum, dist);
}
然而,它变得越来越清洁。我想知道是否有更好的方法来构造上面的代码?谢谢!
答案 0 :(得分:0)
在这种特定情况下,您无法避免分支,因为您正在进行分配,而IOOBE来自分配的左侧(例如,目标)。你无法在右边做什么 - 任务的手边会阻止评估左侧并最终访问越界索引。您需要为其分配,或跳过分配给它。这是分支。
有些语言可以以不同的方式完成分支,但在Java中,您的if
就是这样做的。
您可以在接受lambda的实用程序函数中隐藏分支,但对于给定的示例,这可能是过度的。
答案 1 :(得分:0)
你在dist [i-1]中得到了ArrayIndexOutOfBoundException。因为i-1可以等于-1。因此,在访问dist数组元素之前,最好先检查该值是否大于或等于0。