0

好的,所以我正在尝试创建一个播放列表类,它在构造函数中创建一个包含 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();
    }
}
4

2 回答 2

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

一般来说,集合类比数组更容易使用。

于 2013-09-10T20:45:23.540 回答
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参考的元素。

于 2013-09-10T20:44:26.673 回答