Java:CD库教程 - 存储cd,艺术家和歌曲的数据类型?

时间:2011-11-23 10:37:30

标签: java types arraylist

创建了以下类,现在没有接口/抽象类:

  1. 测试 - 用于创建测试数据
  2. 音乐 - 应存储所有CD
  3. CD - 应存储艺术家和CD标题+所有歌曲
  4. 艺术家 - 仅包含字符串名称
  5. 歌曲 - 包含默认构造函数(Artist anArtist,String songtitle,String Duration)
  6. 持续时间 - 歌曲持续时间和以后的计算
  7. 我尝试了一个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");
    

    我在类Music和class 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图。

1 个答案:

答案 0 :(得分:1)

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