【发布时间】:2025-12-24 15:25:06
【问题描述】:
创建了以下类,暂时没有接口/抽象类:
- 测试 - 用于创建测试数据
- 音乐 - 应该存储所有 CD
- CD - 应该存储艺术家和 CD 标题 + 所有歌曲
- 艺术家 - 仅包含字符串名称
- Song - 包含带有 (Artist anArtist, String songtitle, String Duration) 的默认构造函数
- 时长 - 歌曲时长和以后的计算
我尝试了一个 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 会被“覆盖”。