上一阶段课程,播放器作业,怎样实现普通列表和主播放列表的歌曲分别存放在不同的列表?
怎样实现普通列表和主播放列表的歌曲分别存放在不同的列表?
package com.player.model; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.List; //播放列表类 public class PlayList { private String playListName; private List<Song> musicList=new ArrayList<Song>(); public PlayList() {} public PlayList(String playListName,List<Song> musicList) { this.playListName = playListName; this.musicList = musicList; } public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List<Song> getMusicList() { return musicList; } public void setMusicList(List<Song> musicList) { this.musicList = musicList; } // -将歌曲添加到播放列表: public void addToPlayList(Song song) { musicList.add(song); } // -显示播放列表中所有歌曲: public void displayAllSong() { for(int i=0;i<musicList.size();i++) { System.out.println(musicList.get(i)); } } // -通过id查询歌曲: public Song searchSongById(String id) { for(int i=0;i<musicList.size();i++) { if(id.equals(musicList.get(i).getId())) { return musicList.get(i);//因为有序,所以可以通过遍历,list.get(i)返回list对象 } } return null; } // -通过名称查询歌曲: public Song searchSongByName(String n) { for(int i=0;i<musicList.size();i++) { if(n.equals(musicList.get(i).getName())) { return musicList.get(i); } } return null; } // -修改歌曲: public void updateSong(String id,Song song) { musicList.remove(searchSongById(id));//删除 musicList.add(song);//添加 } // -从播放列表删除歌曲: public void deleteSong(String id) { musicList.remove(searchSongById(id)); } // - 导出歌单 : public void exportPlayList() { try { FileOutputStream fos = new FileOutputStream(this.getPlayListName()+"的歌单.txt"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(musicList); oos.flush(); oos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public String toString() { return "播放列表名称:"+getPlayListName(); } } package com.player.model; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; //播放器类 public class PlayListCollection{ private Map<String,PlayList> playListMap=new HashMap<String,PlayList>(); public PlayListCollection() {} public PlayListCollection(Map<String,PlayList> playListMap) { this.playListMap = playListMap; } public Map<String, PlayList> getPlayListMap() { return playListMap; } public void setPlayListMap(Map<String, PlayList> playListMap) { this.playListMap = playListMap; } // 添加播放列表: public void addPlayList(PlayList playList) { String key=playList.getPlayListName(); PlayList value=playList; playListMap.put(key, value); } // -删除播放列表: public void deletePlayList(PlayList playList) { playListMap.remove(playList.getPlayListName());//Map.remove(key); } // -通过名字查询: public PlayList searchPlayListByName(String playListName) { Set<String> keySet=playListMap.keySet();//Map的查询方法,放入Set中,用keySet()方法得到key值 for(String key:keySet) { if(playListName.equals(key)) { return(playListMap.get(key));//通过Map.get(key)找到value值 } } return null; } // -显示所有播放列表名称: public void displayPlayListName() { Iterator<PlayList> it=playListMap.values().iterator(); while(it.hasNext()) { System.out.print(it.next().getPlayListName()+" "); //System.out.print(it.next()+" ");查看代码发现,it.next()是输出播放列表的对象,应该改为it.next().getPlayListName() } } } package com.player.model; //歌曲类 public class Song implements java.io.Serializable{ // 导出歌单报错,Song类需要实现序列化接口 private String id; private String name; private String singer; public Song() {} public Song(String id,String name,String singer){ this.id = id; this.name = name; this.singer = singer; } public String getId() { 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; } public String toString() { return "歌曲信息为:歌曲id:"+getId()+"歌曲名:"+getName()+"演唱者:"+getSinger(); } @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; } } package com.player.test; import java.util.ArrayList; import java.util.HashMap; import java.util.InputMismatchException; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; import com.player.model.PlayList; import com.player.model.PlayListCollection; import com.player.model.Song; public class TestDemo { boolean flag=false; boolean flag1=false; List<Song> musicList=new ArrayList<Song>(); PlayList p1 = new PlayList("主播放列表",musicList); Map<String,PlayList> playListMap=new HashMap<String,PlayList>(); Set<Entry<String,PlayList>> entrySet=playListMap.entrySet();//entrySet方法取出所有key和value值 PlayListCollection plc=new PlayListCollection(playListMap); Scanner console = new Scanner(System.in); int i = 0; public void menu() { plc.addPlayList(p1);//因为HashMap不会加入重复的 System.out.println("***********************************"); System.out.println("**主菜单**"); System.out.println("1--播放列表管理"); System.out.println("2--播放器管理"); System.out.println("0--退出"); System.out.println("***********************************"); System.out.println("请输入对应数字进行操作:"); do { flag=false; try { i = console.nextInt(); } catch (InputMismatchException e) { System.out.println("请输入数字"); console.next();// 抛出异常,重新接收输入 } if (i == 0 || i == 1 || i == 2) { switch (i) { case 1: flag=false; playList(); break; case 2: flag=false; playListCollection(); break; case 0: flag=false; System.out.println("谢谢光临"); break; } } else { System.out.println("请输入0~2:"); flag=true; } }while(flag==true); } public void playList() { while(!flag1) { 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("***********************************"); System.out.println("请输入对应的数字对播放列表进行管理:"); do { flag=false; try { i = console.nextInt(); } catch (InputMismatchException e) { System.out.println("请输入数字"); console.next();// 抛出异常,重新接收输入 continue; } if (i < 10) { switch (i) { case 1: System.out.println("将歌曲添加到主播放列表"); System.out.println("请输入要添加的歌曲的数量:"); int j = 0;// 用于循环次数而已 try { j = console.nextInt(); } catch (InputMismatchException e) { System.out.println("请输入数字"); console.next();// 抛出异常,重新接收输入 } for (int k = 1; k <= j; k++) { System.out.println("请输入第" + k + "首歌曲"); System.out.println("请输入歌曲的id:"); String sid = console.next(); System.out.println("请输入歌曲的名称:"); String sname = console.next(); System.out.println("请输入歌曲的演唱者:"); String ssinger = console.next(); p1.addToPlayList(new Song(sid, sname, ssinger));// 参数直接new Song("","","")同时传参 } break; case 2: System.out.println("将歌曲添加到普通放列表"); System.out.println("请输入要添加的播放列表名称:"); String lname=console.next(); if(plc.searchPlayListByName(lname)==null) {//悖论 // if(p1==null) { System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!"); }else { System.out.println("请输要添加的歌曲数量:"); j = 0;// 用于循环次数而已 do { flag=false; try { j = console.nextInt(); } catch (InputMismatchException e) { System.out.println("请输入数字"); flag=true; console.next();// 抛出异常,重新接收输入 } }while(flag==true); for(int k=1;k<=j;k++) { System.out.println("请输入第"+k+"首歌曲"); System.out.println("请输入歌曲的id:"); String sid=console.next(); flag=false; for(int q=0;q<p1.getMusicList().size();q++) { if(sid.equals(p1.getMusicList().get(q).getId())) { // playListMap.get(lname).addToPlayList(playListMap.get(lname).searchSongById(sid));//playListMap.get(lname)返回PlayList对象 // 另外,向普通播放列表添加数据,也不应该是从普通播放列表查找数据添加进去,应该是从主播放列表查找数据进行添加。 playListMap.get(lname).addToPlayList(p1.searchSongById(sid)); flag=true; break; } } if(!flag) { System.out.println("请输入歌曲的名称:"); String sname=console.next(); System.out.println("请输入歌曲的演唱者:"); String ssinger=console.next(); playListMap.get(lname).addToPlayList(new Song(sid,sname,ssinger)); p1.addToPlayList(new Song(sid,sname,ssinger));//主播放列表也添加该歌曲 } } } break; case 3: System.out.println("通过歌曲id查询播放列表中的歌曲"); System.out.println("请输入要查询的播放列表名称:"); lname=console.next(); if(plc.searchPlayListByName(lname)==null) { System.out.println("无此播放列表"); }else { System.out.println("请输入要查询的歌曲id:"); String sid=console.next(); flag=false; for(int q=0;q<p1.getMusicList().size();q++) { if(sid.equals(plc.searchPlayListByName(lname).getMusicList().get(q).getId())) { System.out.println(plc.searchPlayListByName(lname).searchSongById(sid)); flag=true; break; } } if(!flag) { System.out.println("该歌曲不存在!"); flag=true; } //else {System.out.println("该歌曲在播放列表"+plc.searchPlayListByName(lname)+"中不存在!");} //切记不要在循环中写else,因为如果循环执行多次,肯定有歌曲是不符合要求的,即使歌曲存在,也会将不存在的信息多次输出。 } break; case 4: System.out.println("通过歌曲名称查询播放列表中的歌曲"); System.out.println("请输入要查询的播放列表名称:"); lname=console.next(); if(playListMap==null){ System.out.println("无此播放列表"); } else if(plc.searchPlayListByName(lname)==null) { System.out.println("无此播放列表"); } else { System.out.println("请输入要查询的歌曲名称:"); String sname=console.next(); flag=false; for(int q=0;q<p1.getMusicList().size();q++) { if(sname.equals(plc.searchPlayListByName(lname).getMusicList().get(q).getName())) { System.out.println(plc.searchPlayListByName(lname).searchSongByName(sname)); flag=true; break; } } if(!flag) { System.out.println("抱歉,没有该歌曲哟"); } } break; case 5: System.out.println("修改播放列表中的歌曲"); System.out.println("请输入要修改歌曲的id:"); String sid=console.next(); System.out.println("请输入要修改歌曲的名称:"); String sname=console.next(); System.out.println("请输入要修改歌曲的演唱者:"); String ssinger=console.next(); for(Entry<String,PlayList> entry:entrySet) { (entry.getValue()).updateSong(sid,new Song(sid,sname,ssinger)); } break; case 6: System.out.println("删除播放列表中的歌曲"); System.out.println("请输入要的操作的播放列表"); lname=console.next(); System.out.println("请输入要删除歌曲的id:"); sid=console.next(); if(lname.equals("主播放列表")) { for(Entry<String,PlayList> entry:entrySet) { (entry.getValue()).deleteSong(sid); } }else { plc.searchPlayListByName(lname).deleteSong(sid); } break; case 7: System.out.println("显示播放列表中的所有歌曲"); System.out.println("请输入要显示的播放列表的名称:"); lname=console.next(); if(playListMap==null){ System.out.println("无此播放列表"); } else if(plc.searchPlayListByName(lname)==null) { System.out.println("无此播放列表"); } else{ plc.searchPlayListByName(lname).displayAllSong();//此处遍历的是所有播放列表存放的歌单,并且list方式会重复 } break; case 8: System.out.println("导出歌单"); System.out.println("请输入要导出的播放列表的名称:"); lname=console.next(); plc.searchPlayListByName(lname).exportPlayList(); break; case 9: menu(); flag1=true; break; } } else { System.out.println("error"); flag=true; } }while(flag1==true); } } public void playListCollection() { while(!flag1) { 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("***********************************"); System.out.println("请输入对应的数字对播放器进行管理:"); try{ i=console.nextInt(); }catch(InputMismatchException e) { System.out.println("请输入数字"); console.next();//抛出异常,重新接收输入 continue;//前面用flag,do,while也可以。但是continue更简捷,但是非指定数字未处理,此处省略,处理见上。 } if(i==1||i==2||i==3||i==4||i==9) { switch (i) { case 1: System.out.println("向播放器添加播放列表"); System.out.println("请输入要添加的播放列表的名称:"); String lname=console.next(); // List<Song> p=new ArrayList<Song>(); plc.addPlayList(new PlayList(lname,musicList)); break; case 2: System.out.println("向播放器删除播放列表"); lname=console.next(); if(playListMap==null){ System.out.println("无此播放列表"); } else if(plc.searchPlayListByName(lname)==null) { System.out.println("无此播放列表"); } // 删除播放列表时,先判断查询的播放列表是否为null,如果为null要给出错误提示,如果不为null再删除。 // 之所以会报错,是因为如果playList为null,在调用getPlayListName()方法时就会报错。 else{ plc.deletePlayList(plc.searchPlayListByName(lname)); System.out.println("删除成功!"); } break; case 3: System.out.println("通过名字查询播放列表信息"); lname=console.next(); if(playListMap==null){ System.out.println("无此播放列表"); } else if(plc.searchPlayListByName(lname)==null) { System.out.println("无此播放列表"); } else { System.out.println("该列表找到了!"); } break; case 4: System.out.println("显示所有播放列表名称"); plc.displayPlayListName(); p1.toString(); break; case 9: System.out.println("返回上一级菜单"); menu(); flag1=true; break; } } } } public static void main(String[] args) { TestDemo testDemo=new TestDemo(); testDemo.menu(); } }
0
收起
正在回答 回答被采纳积分+1
3回答
相似问题
登录后可查看更多问答,登录/注册
从网页搭建入门Java Web2018版
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10205 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星