나는 Java의 포인터에 문제가 있습니다. java.lang.nullpointerexception을 어떻게 수정합니까?
-
20-09-2019 - |
문제
이것은 Java의 희소 행렬에서 요소를 가져 오는 메소드입니다. 나는 계속 받고있다 java.lang.NullPointerException
오류. 코드를 살펴보고 오류를 찾을 수 없습니다.
public int getElement(int row,int col){
int result = 0;
MatrixEntry matrixentry = null;
if ((row >= 0) && (row < getNumRows()) &&
(col >= 0) && (col < getNumCols())) {
if (col == colArray[col].getColumn() && row ==rowArray[row].getRow()){
matrixentry = rowArray[row];
while (matrixentry.getColumn() < col) {
matrixentry = matrixentry.getNextColumn();
} // end while
if (matrixentry.getColumn() > col){
return 0;
}
if (matrixentry == null){
return 0;
}//
result = matrixentry.getData();
}//
}//
return result;
} // end
해결책
당신은 확인합니다 matrixentry
~을 위한 null
while 루프에서 이미 사용하고 전화 한 후 .getColumn()
그리고 .getNextColumn()
.
먼저 확인하면 코드가 더 좋아질 것 같아요.
matrixentry = rowArray[row];
while (null != maxtrixentry && matrixentry.getColumn() < col) {
matrixentry = matrixentry.getNextColumn();
}
if (null == maxtrixentry || matrixentry.getColumn() > col){
return 0;
}
result = matrixentry.getData();
다른 팁
나는 당신이 실행하는 것이 좋습니다 FindBugs 코드도. 그것은 이미 액세스 한 후 Matrixentry의 Null Check와 같은 많은 작은 것들을 잡는 놀라운 일을합니다.
배열 요소를 선사 시합해야합니다. 그것은 기본으로 덮여 있습니다 Sun Java 배열 튜토리얼. 당신은 결국 사용할 수 있습니다 Arrays#fill()
그에 대한.
RowaArray와 Colarray가 제대로 초기화 되었습니까?
당신의 의견에 따르면 그들은 그렇지 않습니다.
코드를 읽기 어렵고 이와 같은 점검이 일치하지 않습니다.
if (matrixentry.getColumn() > col) {
return 0;
}
if (matrixentry == null){
return 0;
}
객체에서 메소드를 호출 한 다음 NULL을 확인하십시오.
당신이 당신의 인생을 프로그래밍과 묶을 것이고 그것은 단지 숙제 일뿐 아니라, 당신의 코드 프레젠테이션과 표현성을 방문 카드로 취급하는 것이 좋습니다.
제휴하지 않습니다 StackOverflow