好的,所以我正在尝试创建一个播放列表类,在构造函数中创建一个包含50个SongRecords的数组。我首先使用未经编辑的代码获得了NPE,因此我尝试更改它并明确写入构造函数,为播放列表中的每个元素分配一个无信息的SongRecord()。但是,NPE出现在我引用要分配歌曲记录的特定歌曲元素的行上。如果我不能为元素分配歌曲记录,我该如何解决?
以下是我的代码的一部分,我认为是错误的相关信息。 NPE指向“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 :(得分: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();
}
或者更好的是,将amount
更改为List<SongRecord>
类型的变量,然后将其初始化为:
amount = new ArrayList<SongRecord>(); // Or new ArrayList<> if you're using Java 7
通常,集合类比数组更容易使用。
答案 1 :(得分:1)
您尚未初始化amount
amount = new SongRecord[MAX];
在构造函数中,由于某种原因,您初始化另一个SongRecord
数组。相反,初始化你的
public Playlist(){
this.currentSongs=0;
this.amount = new SongRecord[MAX];
for (int i=0; i<MAX;i++){
this.amount[i]=new SongRecord();
}
}
如果您没有初始化数组,默认情况下它将引用null
。您无法访问null
引用的元素。