我正在为 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] 等中的歌曲吗?
最佳答案
发生这种情况是因为您的歌曲对象是可变的,并且您在循环的所有迭代中不断重用同一实例。
您应该在循环中找到一个开始定义下一首歌曲的位置,并在该位置创建一个新的歌曲对象。否则,数组的多个元素会指向同一个对象,从而导致更改一首歌曲会导致数组中存储的所有其他歌曲发生更改。
这是您需要构建的内容(左侧)和您现在拥有的内容(右侧)的说明。
以下是使用 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
...
}
关于java - JAVA数组中的对象是互斥的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19352433/