请教老师关于普通列表集合问题
我在创建普通列表时先判断此列表是否存在,如果存在就添加歌曲,没的话就新建了一个,再放进map里面,但是弄完后怎样才能把歌单放进普通列表的一个新建列表中呢,添加完歌单后不显示而主播放列表歌单显示了,请老师看下代码。
public class PlayList {//播放列表类 private String playListName;//播放列表名称 private List<Song> musicList;//播放列表中的歌曲集合 PlayListCollection oo=new PlayListCollection(); public PlayList(String playListName,List<Song> musicList){ musicList= new ArrayList<Song>(); this.playListName=playListName; this.musicList=musicList; } public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List getMusicList() { return musicList; } public void setMusicList(List musicList) { this.musicList = musicList; } public void addToPlayList(Song song){//将歌曲添加到播放列表 Scanner aa=new Scanner(System.in); System.out.println("请输入要的歌曲的数量:"); int songNum=aa.nextInt(); for(int n=0;n<songNum;n++){ System.out.println("请输入第"+(n+1)+"首歌曲:"); System.out.println("请输入歌曲的id:"); String id=aa.next(); System.out.println("请输入歌曲的名称:"); String name=aa.next(); System.out.println("请输入演唱者:"); String singer=aa.next(); song=new Song(id, name, singer); musicList.add(song); } } public Song searchSongById(String id){//通过id查询歌曲 Scanner aa=new Scanner(System.in); System.out.println("请输入要查询播放列表名称:"); System.out.println("请输入要查询的歌曲id:"); String ID=aa.next(); for(Song song:musicList){ if(song.getId().equals(ID)){ System.out.println(song); } } return null; }
public class PlayListCollection {//播放器类 private Map<String,PlayList> playListMap; public PlayListCollection(){ this.playListMap=playListMap; playListMap=new HashMap<String, PlayList>(); } public Map getPlayListMap() { return playListMap; } public void setPlayListMap(Map playListMap) { this.playListMap = playListMap; } public void addPlayList(PlayList playList){//添加播放列表 Scanner sc = new Scanner(System.in); System.out.println("输入要添加播放列表的名称:"); String name = sc.next(); if(playListMap.containsKey(name)==true){ System.out.println("该播放列表已存在"); }else{ List<Song> newList=new ArrayList<Song>(); playList=new PlayList(name,newList); newList.add(null); playListMap.put(name,playList); System.out.println("播放列表添加成功!"); } } public void deletePlayList(PlayList playList){//删除播放列表 } public PlayList searchPlayListByName(String playListName){//通过名字查询 return null; } public void displayPlayListName(){//显示所以播放列表名称 Iterator<PlayList> it=playListMap.values().iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
public class TestDemo { public void mainMenu() { System.out.println("******************************"); System.out.println("**********主菜单*********"); System.out.println(" 1-播放列表管理 "); System.out.println(" 2-播放器管理 "); System.out.println(" 0-退出 "); System.out.println("******************************"); } public void playListMenu(){ System.out.println("******************************"); System.out.println(" **播放列表管理**"); System.out.println(" 1--将歌曲添加到主播放列表"); System.out.println(" 2--将歌曲添加到普通播放列表"); System.out.println(" 3--将歌曲id查询播放列表中的歌曲"); System.out.println(" 4--通过歌曲名称查询播放列表中的歌曲"); System.out.println(" 5--修改播放列表中的歌曲"); System.out.println(" 6--删除播放列表中的歌曲"); System.out.println(" 7--显示播放列表中的所有歌曲"); System.out.println(" 8--导出歌曲"); System.out.println(" 9--返回上一级菜单"); System.out.println("******************************"); } public void playerMenu(){ System.out.println("******************************"); System.out.println(" **播放器管理**"); System.out.println(" 1--向播放器添加播放列表"); System.out.println(" 2--从播放器删除播放列表"); System.out.println(" 3--通过名字查询播放列表信息"); System.out.println(" 4--显示所以播放列表名称"); System.out.println(" 9--返回上一级菜单"); System.out.println("******************************"); } public static void main(String[] args) { PlayList one=new PlayList("主播放列表", null); PlayList two=new PlayList(null, null); List<Song> plc=new ArrayList<Song>(); List<Song> puto=new ArrayList<Song>(); //plc.addAll(one.getMusicList()); PlayListCollection gg=new PlayListCollection(); (gg.getPlayListMap()).put("主播放列表", one); int n=0; boolean flag=false; TestDemo aa=new TestDemo(); while(flag==false){ aa.mainMenu(); Scanner hh=new Scanner(System.in); System.out.println("请输入对应数字进行操作:"); n=hh.nextInt(); flag=true; if(n<0||n>3){ System.out.println("输入错误,请重新输入"); flag=false; continue; }else if(n==0){ System.out.println("***已退出程序***"); break; } while(flag==true){ switch(n){ case 1: aa.playListMenu(); System.out.println("请输入对应数字对播放列表进行管理:"); int i=hh.nextInt(); switch(i){ case 1: System.out.println("将歌曲添加到主播放列表"); one.addToPlayList(null); System.out.println("主播放列表:"); one.displayAllSong(); System.out.println("普通播放列表:"); two.displayAllSong(); break; case 2: System.out.println("将歌曲添加到普通播放列表"); System.out.println("请输入要添加的播放列表名称"); String a=hh.next(); if((gg.getPlayListMap()).containsKey(a)==true){ two.addToPlayList(null); break; }else{ System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!"); } System.out.println("主播放列表:"); one.displayAllSong(); System.out.println("普通播放列表:"); two.displayAllSong(); break; case 3: one.searchSongById(null); break; case 4: break; case 5: break; case 6: break; case 7: System.out.println("显示播放列表中的所有歌曲"); System.out.println("请输入要显示的播放列表名称:"); String b=hh.next(); if(b.equals(one.getPlayListName())){ one.displayAllSong(); break; } if(b.equals(two.getPlayListName())){ two.displayAllSong(); } else{ System.out.println("没有该播放列表,请重新输入!"); } break; case 8: break; case 9: flag=false; break; } break; case 2: aa.playerMenu(); System.out.println("请输入对应数字对播放器进行管理:"); int t=hh.nextInt(); switch(t){ case 1: gg.addPlayList(null); break; case 2: break; case 3: break; case 4: gg.displayPlayListName(); break; case 9: flag=false; break; } break; } } } } }
正在回答
你的two普通播放列表内容是空的,参照如下修改
public static void main(String[] args) { PlayList one = new PlayList("主播放列表"); PlayList two = new PlayList(null); PlayListCollection plCollection = new PlayListCollection(); …… case 2: System.out.println("将歌曲添加到普通播放列表"); System.out.println("请输入要添加的播放列表名称"); String a = hh.next(); two=plCollection.searchPlayListByName(a); if ((gg.getPlayListMap()).containsKey(a) == true) { //id和演唱者需要接收输入传进去,并且需要判断该id的歌曲是否在主播放列表存在 two.addToPlayList(new Song("id",a,"演唱者")); break; } else { System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!"); } …… PlayListCollection类: public PlayList searchPlayListByName(String playListName) {// 通过名字查询 PlayList playList=null; Set<String> playListSet=playListMap.keySet(); for(String s:playListSet){ if(s.equals(playListName)){ playList=playListMap.get(s);break; } } return playList; }
public class PlayList {//播放列表类 private String playListName;//播放列表名称 private List<Song> musicList;//播放列表中的歌曲集合 public PlayList(String playListName){ musicList= new ArrayList<Song>(); this.playListName=playListName; this.musicList=musicList; } public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List getMusicList() { return musicList; } public void setMusicList(List musicList) { this.musicList = musicList; } public void addToPlayList(Song song){//将歌曲添加到播放列表 Scanner aa=new Scanner(System.in); System.out.println("请输入要的歌曲的数量:"); int songNum=aa.nextInt(); for(int n=0;n<songNum;n++){ System.out.println("请输入第"+(n+1)+"首歌曲:"); System.out.println("请输入歌曲的id:"); String id=aa.next(); System.out.println("请输入歌曲的名称:"); String name=aa.next(); System.out.println("请输入演唱者:"); String singer=aa.next(); song=new Song(id, name, singer); for(int i=0;i<musicList.size();i++){ if(song.getId().equals(musicList.get(i).getId())){ System.out.println("该歌曲已经存在!"); return; } } musicList.add(song); } } public Song searchSongById(String id){//通过id查询歌曲 Scanner aa=new Scanner(System.in); System.out.println("请输入要查询播放列表名称:"); System.out.println("请输入要查询的歌曲id:"); String ID=aa.next(); for(Song song:musicList){ if(song.getId().equals(ID)){ System.out.println(song); } } return null; } public Song searchSongByName(String n){//通过名称查询歌曲 return null; } public void updateSong(Song song){//修改歌曲 } public void deleteSong(String id){//从播放列表删除歌曲 } public void displayAllSong(){//显示播放列表中所有的歌曲 for(int n=0;n<musicList.size();n++){ System.out.println(musicList.get(n)); } } public void exportPlayList(){//导出歌单 } }
public class PlayListCollection {//播放器类 private Map<String,PlayList> playListMap; public PlayListCollection(){ this.playListMap=playListMap; playListMap=new HashMap<String, PlayList>(); } public Map getPlayListMap() { return playListMap; } public void setPlayListMap(Map playListMap) { this.playListMap = playListMap; } public void addPlayList(PlayList playList){//添加播放列表 Scanner sc = new Scanner(System.in); System.out.println("输入要添加播放列表的名称:"); String name = sc.next(); if(playListMap.containsKey(name)==true){ System.out.println("该播放列表已存在"); }else{ List<Song> newList=new ArrayList<Song>();//添加新的普通列表 playList=new PlayList(name); newList.add(null); playListMap.put(name,playList); System.out.println("播放列表添加成功!"); } } public void deletePlayList(PlayList playList){//删除播放列表 } public PlayList searchPlayListByName(String playListName){//通过名字查询 return null; } public void displayPlayListName(){//显示所以播放列表名称 Set<Entry<String,PlayList>> entrySet=playListMap.entrySet(); for(Entry<String,PlayList> entry:entrySet){ System.out.println(entry.getKey()); } } }
public class TestDemo { public void mainMenu() { System.out.println("******************************"); System.out.println("**********主菜单*********"); System.out.println(" 1-播放列表管理 "); System.out.println(" 2-播放器管理 "); System.out.println(" 0-退出 "); System.out.println("******************************"); } public void playListMenu(){ System.out.println("******************************"); System.out.println(" **播放列表管理**"); System.out.println(" 1--将歌曲添加到主播放列表"); System.out.println(" 2--将歌曲添加到普通播放列表"); System.out.println(" 3--通过歌曲id查询播放列表中的歌曲"); System.out.println(" 4--通过歌曲名称查询播放列表中的歌曲"); System.out.println(" 5--修改播放列表中的歌曲"); System.out.println(" 6--删除播放列表中的歌曲"); System.out.println(" 7--显示播放列表中的所有歌曲"); System.out.println(" 8--导出歌曲"); System.out.println(" 9--返回上一级菜单"); System.out.println("******************************"); } public void playerMenu(){ System.out.println("******************************"); System.out.println(" **播放器管理**"); System.out.println(" 1--向播放器添加播放列表"); System.out.println(" 2--从播放器删除播放列表"); System.out.println(" 3--通过名字查询播放列表信息"); System.out.println(" 4--显示所以播放列表名称"); System.out.println(" 9--返回上一级菜单"); System.out.println("******************************"); } public static void main(String[] args) { PlayList one=new PlayList("主播放列表"); PlayList two=new PlayList(null); List<Song> plc=new ArrayList<Song>(); List<Song> puto=new ArrayList<Song>(); //plc.addAll(one.getMusicList()); PlayListCollection gg=new PlayListCollection(); (gg.getPlayListMap()).put("主播放列表", one); int n=0; boolean flag=false; TestDemo aa=new TestDemo(); while(flag==false){ aa.mainMenu(); Scanner hh=new Scanner(System.in); System.out.println("请输入对应数字进行操作:"); n=hh.nextInt(); flag=true; if(n<0||n>3){ System.out.println("输入错误,请重新输入"); flag=false; continue; }else if(n==0){ System.out.println("***已退出程序***"); break; } while(flag==true){ switch(n){ case 1: aa.playListMenu(); System.out.println("请输入对应数字对播放列表进行管理:"); int i=hh.nextInt(); switch(i){ case 1: System.out.println("将歌曲添加到主播放列表"); one.addToPlayList(null); System.out.println("主播放列表:"); one.displayAllSong(); System.out.println("普通播放列表:"); two.displayAllSong(); break; case 2: System.out.println("将歌曲添加到普通播放列表"); System.out.println("请输入要添加的播放列表名称"); String a=hh.next(); if((gg.getPlayListMap()).containsKey(a)==true){ two.addToPlayList(null); break; }else{ System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!"); } System.out.println("主播放列表:"); one.displayAllSong(); System.out.println("普通播放列表:"); two.displayAllSong(); break; case 3: one.searchSongById(null); break; case 4: break; case 5: break; case 6: break; case 7: System.out.println("显示播放列表中的所有歌曲"); System.out.println("请输入要显示的播放列表名称:"); String b=hh.next(); if(b.equals(one.getPlayListName())){ one.displayAllSong(); break; } if(b.equals(two.getPlayListName())){ two.displayAllSong(); } else{ System.out.println("没有该播放列表,请重新输入!"); } break; case 8: break; case 9: flag=false; break; } break; case 2: aa.playerMenu(); System.out.println("请输入对应数字对播放器进行管理:"); int t=hh.nextInt(); switch(t){ case 1: gg.addPlayList(null); break; case 2: break; case 3: break; case 4: gg.displayPlayListName(); break; case 9: flag=false; break; } break; } } } } }
public class Song { private String id;//歌曲id private String name;//歌曲名 private String singer;//演唱者 public Song(String id,String name,String singer){//构造方法 this.id=id; this.name=name; this.singer=singer; } public String getId() {//getter和setter方法 return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSinger() { return singer; } public void setSinger(String singer) { this.singer = singer; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((name == null) ? 0 : name.hashCode()); result = prime * result + ((singer == null) ? 0 : singer.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Song other = (Song) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; if (singer == null) { if (other.singer != null) return false; } else if (!singer.equals(other.singer)) return false; return true; } @Override public String toString() { return "歌曲信息 :id为" + id + ", 歌曲名称为:" + name + ", 演唱者为:" + singer ; } }
上述代码做如下调整:
1、PlayList类
1)去掉PlayListCollection oo=new PlayListCollection();无用代码
2)addToPlayList(Song song)方法里要先遍历播放列表的歌曲集合List<Song>,判断播放列表中的歌曲是否存在,如果不存在再进行add(song)添加操作。在测试类中直接PlayList mainPlayList = new PlayList("主播放列表");创建主播放列表,再创建Song对象,主方法中添加就是调用addToPlayList(song)方法。
3)下图参数id没有用上,equals比较的应该是传入的id,输入放到测试类中,并且返回找到的Song对象,找不到返回null。
2、PlayListCollection类
1)addPlayList(PlayList playList)方法中,map的key不能重复,所以这里只需要一行代码
注意name可以直接通过playList.getPlayListName()代替
2)displayPlayListName()方法遍历显示的PlayList对象,需要显示Set<String> 播放列表名称。
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星