2013-09-10 2 views
0

좋아요, 그래서 생성자에서 50 개의 SongRecords 배열을 만드는 재생 목록 클래스를 만들려고합니다. 먼저 편집되지 않은 코드로 NPE를 얻었으므로이를 변경하려고 시도하고 명시 적으로 생성자에 대해 no-info SongRecord()를 재생 목록의 모든 요소에 할당하도록 썼습니다. 그러나 NPE는 특정 노래 요소를 노래 레코드로 지정하는 줄에 나타납니다. 요소에 노래 기록을 할당 할 수 없으면 어떻게 수정합니까?NullPointerException : null이 아니기 위해 어떻게 할당합니까?

다음은 오류에 대한 관련 정보 인 제 코드의 일부입니다. 라인 "this.amount [I] ..."

public class Playlist { 
    private int currentSongs; 
    private SongRecord[] amount; 
    public static final int MAX=50; 


/*Constructor that defaults current number of songs to 0 and max space to be 50 songs*/ 

public Playlist(){ 
    this.currentSongs=0; 
    SongRecord[] list=new SongRecord[MAX]; 
    for (int i=0; i<MAX;i++){ 
     this.amount[i]=new SongRecord(); 
    } 
} 
+0

AHAHAHAHAHA 너무 바보입니다. 대단히 감사합니다. 이 숙제에서 가장 큰 문제를 해결했습니다. –

답변

1

에 NPE 포인트 당신은 당신의 생성자에서

amount = new SongRecord[MAX]; 

amount를 초기화하지 않은, 당신은 몇 가지 이유로 다른 SongRecord 배열을 초기화합니다. 당신은 배열을 초기화하지 않는 경우 대신, 기본적으로 null를 참조합니다, 당신에게

public Playlist(){ 
    this.currentSongs=0; 
    this.amount = new SongRecord[MAX]; 
    for (int i=0; i<MAX;i++){ 
     this.amount[i]=new SongRecord(); 
    } 
} 

를 초기화합니다. null 참조의 요소에는 액세스 할 수 없습니다.

+0

'this.amount [i] = ...'와의 문체 일관성을 위해서'this.amount = new SongRecord [MAX];'로 초기화 할 수 있습니다. –

+0

@ JoshuaTaylor 물론, 나는 그것에 아무런 문제가 없다. –

4

가 있습니다 (변수 list 포함) 다른 배열을 만들었습니다 - 그러나 amount을 채우기 위해 노력 :

SongRecord[] list=new SongRecord[MAX]; 
for (int i=0; i<MAX;i++){ 
    this.amount[i]=new SongRecord(); 
} 

amount 여전히 (기본 모든 참조 형 변수에 대한 값) 그래서 당신이 null 예외가 생겼어. 나는 당신을 의심

원하는 :

amount = new SongRecord[MAX]; 
for (int i = 0; i < MAX;i++) { 
    amount[i] = new SongRecord(); 
} 

또는 더 나은 아직, 유형 List<SongRecord>의 변수에 amount을 변경하고 다음과 같이 초기화 : 일반적으로

amount = new ArrayList<SongRecord>(); // Or new ArrayList<> if you're using Java 7 

, 컬렉션 클래스가 작동하기 쉽다 배열보다.