【问题标题】:Check if index is OutOfBounds in a 2D array检查二维数组中的索引是否为 OutOfBounds
【发布时间】:2017-03-24 16:02:51
【问题描述】:

所以我在 java 中构建了一种“生命游戏”应用程序,并且在检测索引何时超出范围时遇到了一些问题。下面的代码是来自 SO 的另一个 qustion 的修改版本。

二维数组:

1,1,1,1
1,1,1,1
1,1,1,1
1,1,1,1

代码

private void traverse() {       
        for (int i = 0; i < brickArray.length; i++) {
            for (int j = 0; j < brickArray[i].length; j++) {

                System.out.println(i - 1 + "," + j);
                checkIfAllowed(i - 1, j);

            }
        }   
    }

    public void checkIfAllowed(int row, int column) {
    boolean incorrect = check(row) && check(column);
    if (incorrect) {
        System.out.println("Wall");
    } else {
        System.out.println("Road");

    }
}

private boolean check(int index) {
    return (index < 0 || index > board.getHeight());
}

结果:

遍历:

-1,0
Road
-1,1
Road
-1,2
Road
-1,3
Road
0,0
Road
0,1
Road
0,2
Road
0,3
Road
1,0
Road
1,1
Road
1,2
Road
1,3
Road
2,0
Road
2,1
Road
2,2
Road
2,3
Road

在本例中,顶部的 4 个单元格应该打印了“Wall”,但他们没有。

【问题讨论】:

  • check 在这种情况下似乎暗示 incorrect 而不是 correct
  • return (index &lt; 1 || index &gt; board.getHeight()); 你意识到0 小于1,对吧?
  • 你在哪里定义board及其方法getHeight()
  • 如果索引超出范围,您的检查方法将返回 true。因此,对于 case check(0) && check(0),它将返回 true 对于任何其他情况,它将返回 false,因为只有 true && true == true。假&&真==假,假&&假=假
  • 将返回值从check( ) 更改为:return index &lt; 0 || index &gt;= board.getHeight( );

标签: java multidimensional-array indexoutofboundsexception traversal


【解决方案1】:

负面名称和中性名称的陷阱 (check)。

boolean incorrect = check(row) || check(column);

当行或列不正确时,整个坐标都不正确。

我会在这里写check,因为现在棋盘必须是正方形的,使用 getHeight 检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    相关资源
    最近更新 更多