나는 Java의 포인터에 문제가 있습니다. java.lang.nullpointerexception을 어떻게 수정합니까?

StackOverflow https://stackoverflow.com/questions/1734592

문제

이것은 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을 확인하십시오.

당신이 당신의 인생을 프로그래밍과 묶을 것이고 그것은 단지 숙제 일뿐 아니라, 당신의 코드 프레젠테이션과 표현성을 방문 카드로 취급하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top