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

标签 java arrays

我正在为 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/

相关文章:

java - 安卓 : Array of EditText

java - 如何链接两个不同的元素

java - Java 中的复杂组正则表达式模式

python - 在 Python 中创建随机变量,数组的三分之一为零

java - 如何通过 android java 发送 google pay "Request"像 amazon bhim pay 在线支付

java - Apache POI : Extract a paragraph and the table that follows from word document (docx) in java

java - 重新排列 int 数组,用 Java 中的最大值排序

java - 如何将枚举的一个变量中的所有元素加载到数组中?

java - 为什么 for 循环没有越界错误(Java)

c++ - 替代 'new'动态数组的push_back吗?