清洁的';if语句结构';要避免java.lang.ArrayIndexOutOfBoundsException,请执行以下操作:-1
我有以下代码:清洁的';if语句结构';要避免java.lang.ArrayIndexOutOfBoundsException,请执行以下操作:-1,java,algorithm,Java,Algorithm,我有以下代码: 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, di
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);
}
然而,它变得不那么干净了。我想知道有没有更好的方法来构造上述代码?谢谢 在这种特定情况下,您无法避免分支,因为您正在执行任务,并且IOOBE来自任务的左侧(例如,目标)。在作业的右侧,您所能做的任何事情都不会阻止对左侧进行评估并最终访问越界索引。您需要分配给它,或者跳过分配给它。那是分支 有些语言可以用不同的方式进行分支,但在Java中,
if
就是这样做的
您可以将分支隐藏在接受lambda的实用程序函数中,但对于给定的示例来说,这可能有些过分。您可以在dist[i-1]中获得ArrayIndexOutOfBoundException。因为i-1可以等于-1。因此,最好在访问dist数组元素之前检查该值是否大于或等于0。这可以说更干净。少排队!=更干净。三元组应该小心使用。
if(i>0)
会更简洁,如果这是你的事情。@T.J.Crowder或者更好的int index=i-1编码>然后使用它。这也避免了使用i-1
三次。三元数无论如何都没有意义。你会给0什么字段?