gpt4 book ai didi

java - JAVA数组中的对象是互斥的吗?

转载 作者:行者123 更新时间:2023-12-02 06:38:52 24 4
gpt4 key购买 nike

我正在为 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] 等中的歌曲吗?

最佳答案

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

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

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

An illustration

以下是使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com