Индекс массива вне границ в подсчете для "истинных" булевых значений в java

Пожалуйста помоги. У меня есть код indexArrayOutOfBounds в моем коде. что с этим не так? компилятор говорит, что ошибка возникает при ifststment.

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 ответа

Вам нужно, чтобы if block находился внутри внутреннего цикла for или индексы не соответствовали чему-либо в массиве.

В настоящее время этот оператор if работает, когда j уже достиг nCol, что означает, что он превысил границы массива.

Чтобы исправить это, удалите } из строки ниже комментариев и добавьте a } в конец. Это эффективно перемещает блок if во внутренний цикл.

Обновить

Вы можете получить нулевой указатель вызывающего исключения equals на ссылках в массиве, которые не был назначен объект. Вероятно, вы должны изменить условие if чтобы сказать это.

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


Как только ваш внутренний цикл: for (j = 3; j < nCol; j++){} завершается, значение j = nCol. Когда вы пытаетесь получить доступ к элементу tableData[i][j] в вашем if, вы пытаетесь добраться до места памяти из пределов массива.

licensed under cc by-sa 3.0 with attribution.