0

我正在为一个 220 类编写代码,它将由一个类处理的歌曲添加到另一个名为 MixCD 的类中,该类具有一组歌曲。我的问题是,在定义第二首或第三首歌曲时,它会与数组中的先前歌曲混淆还是它们是专有的?

添加歌曲的代码是这样的

System.out.println("What is the Song Title?");
                songA.setTitle(sc.next());
                System.out.println("What is the Song's Artist?");
                songA.setArtist(sc.next());
                System.out.println("How long is the Song? (In Seconds)");
                songA.setRunTime(sc.nextInt());
                if(((songA.getRunTime() / 60) < songCD.calcRemainingTime())){
                    if (songCD.addToCD(songA) == true){
                        System.out.println("Song successfully added");
                        lastSongAdded = songA;          
                    } //if
                    else {
                        System.out.println("Song was unable to be added");
                    } //else
                } //if
                else {
                    System.out.println("Song was unable to be added");
                }
                break;

And the Add to CD code is this:
            for(int i = 0; i < mySongs.length; i++) {
            if( mySongs[i] != null ) {
                mySize++;
            }
        }
        if (mySize < (mySongs.length-1)){
            mySongs[mySize] = newSong;
            return true;
        } //if
        else {
            return false;
        } //else
    } //addToCD

因此,当将新歌曲添加到 CD 时,它会更改 songA,但它会更改 songCD[0] 中的歌曲等等吗?

4

2 回答 2

2

发生这种情况是因为您的歌曲对象是可变的,并且您在循环的所有迭代中不断重复使用相同的实例。

您应该在循环中找到开始定义下一首歌曲的位置,并在该点创建一个新的歌曲对象。否则,数组的多个元素指向同一个对象,当更改一首歌曲会导致数组中存储的所有其他歌曲发生变化时,就会产生这种情况。

这是您需要构建的内容(左侧)和您现在拥有的内容(右侧)的图示。

插图

这是使用for循环的方法:

int numberOfSongs = ...; // Figure out how many songs there are
Song[] songs = new Song[numberOfSongs];
for (int i = 0 ; i != numberOfSongs ; i++) {
    songs[i] = new Song(); // create a new song
    song[i].setName(...);  // do the rest of song's processing
    ...
}
于 2013-10-14T01:59:35.840 回答
0

songA不是对象,它是对对象的引用。

因此,只要您执行以下操作,就可以了

songA = new Song()

对于要添加的每首新歌,您都需要这个。

如果你没有这个,你所说的就会发生。所有的歌曲都将是相同的,它们都会改变

于 2013-10-14T01:59:28.167 回答