数组索引超出界限计算java中的“true”布尔值

时间:2014-04-30 18:58:03

标签: java for-loop jtable indexoutofboundsexception

请帮忙。我的代码中有一个indexArrayOutOfBounds。这有什么问题? 编译器说错误发生在if ststement。

private void tableTest(){
        int nRow = sampleTable.getRowCount();
        int nCol = sampleTable.getColumnCount();
        int counter = 0;
        int j, i;

        Object[][] tableData = new Object[nRow][nCol];
        for (i = 0 ; i < nRow ; i++){
            for (j = 3 ; j < nCol ; j++){
                tableData[i][j] = sampleTable.getValueAt(i,j);
                System.out.println(tableData[i][j]);
                //if(counter)
                //    Arrays.deepToString(tableData[i][j]);
            }
            System.out.println("end");
            if(tableData[i][j].equals(true)){
                counter++;
                System.out.print(counter);
            }
        }

    }

2 个答案:

答案 0 :(得分:2)

内循环:for (j = 3 ; j < nCol ; j++){}终止后,j = nCol的值。当您尝试在tableData[i][j]条件中访问元素if时,您正试图到达阵列边界之外的内存位置。

答案 1 :(得分:0)

您需要将if块放在内部for循环中,否则索引不会与数组中的任何内容匹配。

目前,当if已经达到j时,nCol语句就会运行,这意味着它超出了数组的范围。

要解决此问题,请从评论下方的行中删除},然后在末尾添加}。这有效地将if块移动到内循环中。

<强>更新

您可能会在数组中尚未分配对象的引用上调用equals的空指针异常。您应该更改if条件来说明这一点。

if(tableData[i][j] != null && tableData[i][j].equals(true)){