【问题标题】:Java: CD Library tutorial - which data type to store cd, artists and songs?Java:CD 库教程 - 存储 cd、艺术家和歌曲的数据类型是什么?
【发布时间】:2025-12-24 15:25:06
【问题描述】:

创建了以下类,暂时没有接口/抽象类:

  1. 测试 - 用于创建测试数据
  2. 音乐 - 应该存储所有 CD
  3. CD - 应该存储艺术家和 CD 标题 + 所有歌曲
  4. 艺术家 - 仅包含字符串名称
  5. Song - 包含带有 (Artist anArtist, String songtitle, String Duration) 的默认构造函数
  6. 时长 - 歌曲时长和以后的计算

我尝试了一个 ArrayList,但是当我添加另一张 CD 时它会被覆盖。我需要一种数据类型来存储数据并链接到另一个数组。例如:存储 CD1 的艺术家和标题,并链接到包含 CD1 中所有歌曲的另一个数组。

谢谢

Test 类的代码:

Artist aArtist = new Artist("artist1");
        CD aCD = myMusic.addCD(aArtist, "CD1");
        aCD.addSong(aArtist, "song1", "1:00");

aArtist = new Artist("artist2");
        CD aCD = myMusic.addCD(aArtist, "CD2"); //Overwrites arraylist from CD1
        aCD.addSong(aArtist, "song2", "2:00");

我在音乐类和 CD 类中更改了我的 ArrayLists...我认为有一种更简单的方法可以解决该教程,但这里是代码:(输出所有保存的歌曲和 CD 标题)

类音乐:

    import java.util.ArrayList;

public class Music {
    private ArrayList<CD> myCDs = new ArrayList<CD>();

    public CD addCD(Artist anArtist, String cdTitle) {

        CD aCD = new CD(anArtist, cdTitle);
        myCDs.add(aCD);
        return aCD;
    }

    public void showData() {

        for (int i = 0; i < myCDs.size(); i++) {
            for (int j = 0; j < myCDs.get(i).getMyCD().size(); j++) {

                System.out.println(myCDs.get(i).getMyCD().get(j).getSong());
            }
        }

    }
}

类CD:

  import java.util.ArrayList;

public class CD {
    private String cdTitle;
    private ArrayList<Song> myCD = new ArrayList<Song>();

    public CD(Artist aArtist, String cdTitle) {
        setMyCD(aArtist, cdTitle);
    }

    public ArrayList<Song> getMyCD() {
        return myCD;
    }

    public String getMyCDtitle() {
        return cdTitle;
    }

    public void setMyCD(Artist anArtist, String cdTitle) {
        this.cdTitle = anArtist.getName() + ": " + cdTitle;
    }

    public void addSong(Artist anArtist, String aTitle, String aDuration) {

        myCD.add(new Song(anArtist, aTitle, aDuration));

    }
}

班歌:

 public class Song {
    private String song;

    public String getSong() {
        return song;
    }

    public void setSong(String song) {
        this.song = song;
    }

    public Song(Artist anArtist, String songtitle, String aDuration) {
        Duration songDuration = new Duration(aDuration);
        setSong(anArtist.getName() + ": " + songtitle + " ("
                + songDuration.getSongDuration() + ")");

    }

}

一般来说:您将如何解决这样的项目? 我会很感激每一个建议或 uml 图。

【问题讨论】:

  • 您需要提供一些代码让我们知道为什么 CD 会被“覆盖”。

标签: java types arraylist


【解决方案1】:

这可能是aArtist = new Artist("artist2"); CD aCD = myMusic.addCD(aArtist, "CD2"); //Overwrites arraylist from CD1 aCD.addSong(aArtist, "song2", "2:00"); 的问题 您使用相同的 Artist 对象。如果您发布您的 addCD 方法实现,它将对我们更加开放。

【讨论】: