2014-01-09 2 views
3

배열의 필드를 삭제하려고합니다. 배열에 Person (Person의 이름, 성, 생년월일 및 ID가 포함 된) 유형의 개체가 포함되어 있습니다.배열 필드 삭제 (배열에 객체 포함)

제 의도는 각 배열 필드를 찾고 입력 ID를 모든 배열 필드와 비교하는 것입니다. 올바른 것을 찾으면 null으로 설정합니다.

는하지만 얻을 :

Exception in thread "main" java.lang.NullPointerException 

그리고 난 이유를 모르겠어.

public static void removePerson(Person[] container) { 
    TextIO.putln("Enter ID of person to be removed"); 
    int index = TextIO.getInt(); 

    for (int i = 0 ; i < container.length ; i ++) { 
     if (container[i].id == index) 
      container[i] = null; 
    } 
} 
+0

에 대체 행이 이미 "제거"한

container[i].id == index 

(표시된 널) 당신이 NullPointerException이 얻을 수있는 이전 컨테이너 때문이다 모든 가능성 (likelihood),'container' 요소 중 하나는'null'입니다. '컨테이너'가 설정되어 있지 않으므로 사용자가 지정한 코드 만 사용할 수는 없습니다. [SSCCE (단장, 자체 포함, 수정 (편집 가능), 예)] (http://sscce.org)를 보내주십시오. – Dukeling

+2

모든 스택 추적을 인쇄하면 그 이유를 알 수 있습니다. 'if (container [i] .id == index)'에서'if (container [i]! = null && container '로 변경해야합니다. –

답변

3

가능성이 가장 높은 경우는 배열이 완전하지 않다, 그래서 일부 컨테이너 배열 항목이 null이며, container[i].id는 널 포인터 예외를 트리거 것입니다.

if ((container[i] != null) && (container[i].id==index))

으로 테스트를 교체하고 그 문제가 해결되는지 확인.

2

문제는

가에서

if (container[i]!=null && container[i].id == index)