2013-03-26 3 views
0

사용자 지정 연결된 목록에 NullPointerException이 발생하고 있으며 그 이유를 알 수 없습니다. 이 프로그램의 목적은 서랍장을 노드로 시뮬레이트하는 것입니다. 서랍에는 각각 가사 오브젝트를 노드로 포함하는 목록이 있습니다.사용자 지정 연결 목록에 추가하면 NullPointerException이 발생합니다.

다음은 관련 코드입니다. 내 UI 클래스에 new ChestOfDrawers(3); :

public class ChestOfDrawers{ 

    private static OwnList chest; 
    private static int[] parametres; 

    public ChestOfDrawers (int drawers){ 
     chest = new OwnList(); 
     create(); 
    } 

    public static void create(){ 
     for (int i = 0; i < parametres.length; i++) { 
      Object drawer = new Drawer(i, parametres[i]); 
      chest.add(i, drawer); //This is causing the error 
     } 
    } 
} 

Drawer 클래스는 여기에 언급 된 서랍의 클래스입니다되고 난을 만들 때 오류가 발생합니다. ID는 int i이고 서랍 용량은 int parametres이어야합니다. 목록에 추가하기 전에 parametres[] 배열이 채워지고 서랍 용량에 대한 정보가 포함됩니다. 질문 (OwnList)의 연결된 목록은 제공된 과정 자료의 일부이므로 정확하게 100 % 기능을합니다. 이는 자바 자체와 거의 동일합니다. 나는 다른 테스트 클래스에서 클래스를 테스트했고 잘 동작했다. 나는 여기서 어딘가에서 실수를했다. 도와주세요!

+2

왜 여기에 '정적'멤버를 사용하고 있습니까? –

+0

정적 컨텍스트에서 참조 할 수있게하려면 관련이 없습니다. – user2213230

+0

그렇지 않을 수도 있습니다. 그러나이 코드가 많은 의미를 갖지는 않을 것입니다. 새 객체를 만들 때마다 정적 참조를 덮어 씁니다. –

답변

4

문제는 당신이 parametres 배열을 초기화하지 않는다는 것입니다. 이 필드는 기본적으로 null입니다. 선언 된 위치에서 초기화하거나 정적 이니셜 라이저 블록에서 초기화해야합니다. 또한 두 필드와 create 메서드가 정적 인 이유는 무엇입니까? 나는 당신이 실제로 (INT의 새로운 배열은 0으로 채워집니다 포함하도록 parametres 배열이 필요 모르겠어요

public final class ChestOfDrawers{ 
    private final OwnList chest = new OwnList(); 
    private final int[] parametres; 

public ChestOfDrawers (int drawers){ 
    if (drawers < 0) throw new IllegalArgumentException("Drawers may not be negative"); 
    chest = new OwnList(); 
    parametres = new int[drawers]; // <-- I'm assuming that's the intended meaning 
    initialize(); 
}   

private void initialize(){ 
    for(int i = 0; i < parametres.length; i++){ 
     Object drawer = new Drawer(i, parametres[i]); // <-- parametres[i] will always be 0 
     chest.add(i, drawer); 
    } 
} 
} 

: 그 확실히

는 여기에 더 나은 버전의 ... 인스턴스 상태처럼 보인다 값) - 그러나 나는 그것을 독자에게 연습으로 남겨 둘 것이다 :-)

관련 문제