往普通列表添加歌曲出现问题
package com.imooc.model; public class 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; } //getter/setter方法 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; } @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; } //判断obj是否为Song类 if(obj.getClass()==Song.class) { Song song = (Song)obj; return song.getId().equals(id)&&song.getName().equals(name)&&song.getSinger().equals(singer); } return false; } @Override public String toString() { return "歌曲信息 : id=" + id + ", name=" + name + ", singer=" + singer; } }
package com.imooc.model; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class PlayList { // 属性:播放列表名称、播放列表中的List集合 private String playListName; List<Song> musicList = new ArrayList<Song>(); // 构造方法 public PlayList() { } public PlayList(String playListName, List<Song> musicList) { this.playListName = playListName; this.musicList = musicList; } // getter/setter方法 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) { // song在传进来之前先完成属性赋值,循环遍历播放列表,判断该歌曲是否存在 boolean flag = true; for (int i = 0; i < musicList.size(); i++) { if (musicList.get(i).getId().equals(song.getId()) && musicList.get(i).getName().equals(song.getName()) && musicList.get(i).getSinger().equals(song.getSinger())) { System.out.println("该歌曲已存在!"); flag = false; break; } } if (flag) { musicList.add(song); } } // 显示播放列表中所有歌曲 public void displayAllSong() { if (musicList.size() == 0) { System.out.println("当前播放列表为空"); } else { for (int i = 0; i < musicList.size(); i++) { System.out.println(musicList.get(i).toString()); } } } // 通过id查询歌曲 public Song searchSongById(String id) { Song song = new Song(); boolean flag = true; for (int i = 0; i < musicList.size(); i++) { if (id.equals(musicList.get(i).getId())) { song = musicList.get(i); //System.out.println(song.toString()); flag = false; break; } } if (flag) { song=null; } return song; } // 通过名称查询歌曲 public Song searchSongByName(String name) { Song song = new Song(); boolean flag = true; for (int i = 0; i < musicList.size(); i++) { if (name.equals(musicList.get(i).getId())) { song = musicList.get(i); flag = false; break; } } if (flag) { song=null; } return song; } // 修改歌曲 public void updateSong(Song song,String name,String singer) { song.setName(name); song.setSinger(singer); } /*public void updateSong(String id, String name, String singer) { for (int i = 0; i < musicList.size(); i++) { Song song = musicList.get(i); if (id.equals(song.getId())) { song.setName(name); song.setSinger(singer); //musicList.add(song); break; } } }*/ // 从播放列表删除歌曲 public void deleteSong(String id) { for (int i = 0; i < musicList.size(); i++) { Song song = musicList.get(i); if (id.equals(song.getId())) { musicList.remove(song); break; } } } // 导出歌单 public void exportPlayList() { } }
package com.imooc.model; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; public class PlayListCollection { // 属性:存放播放列表的集合:Map private Map<String, PlayList> map = new HashMap<String, PlayList>(); Scanner sc = new Scanner(System.in); // 无参构造 public PlayListCollection() { } // 带参构造 public PlayListCollection(Map<String, PlayList> map) { this.map = map; } // getter/setter方法 public Map<String, PlayList> getMap() { return map; } public void setMap(Map<String, PlayList> map) { this.map = map; } // 方法:添加播放列表 public void addPlayList(PlayList playList) { System.out.println("向播放器中添加播放列表"); System.out.println("请输入要添加的播放列表名称:"); String name = sc.next(); map.put(name, playList); System.out.println("添加成功!"); } // 方法:删除播放列表 public void deletePlayList(PlayList playList) { System.out.println("删除播放列表"); if (map.size() == 0) { System.out.println("当前没有播放列表,请先创建播放列表"); } else { System.out.println("请输入要删除的播放列表:"); String collection = sc.next(); //取得keySet Set<String> keySet = map.keySet(); boolean flag = true; for(String set:keySet) { if(set.equals(collection)) { map.remove(set); System.out.println("删除成功!"); flag = false; break; } } if(flag) { System.out.println("该播放列表不存在"); } } } // 方法:通过名字查询播放列表 public PlayList searchPlayListByName(String playListName) { if(map.size()==0) { System.out.println("当前播放列表为空"); }else { Set<String> keySet = map.keySet(); boolean flag = true; for(String key:keySet) { if(key.equals(playListName)) { System.out.println("该播放列表存在"); System.out.println("该播放列表名称为:"+key); System.out.print("播放列表中所有歌曲为:"); map.get(key).displayAllSong(); flag = false; } } if(flag) { System.out.println("该播放列表不存在"); } } return null; } //方法:通过id查询歌曲信息 public void searchSongById(String id,String playListName) { Set<String> keySet = map.keySet(); boolean flag = true; for(String key:keySet) { if(key.equals(playListName)) { map.get(key).searchSongById(id); break; }else { System.out.println("歌曲不存在!"); } } } //方法:通过歌曲名称查询歌曲信息 public void searchSongByName(String name,String playListName) { Set<String> keySet = map.keySet(); boolean flag = true; for(String key:keySet) { if(key.equals(playListName)) { map.get(key).searchSongByName(name); break; }else { System.out.println("歌曲不存在!"); } } } //修改歌曲信息,所有列表中该歌曲信息都被修改 //如果歌曲id不存在,应该怎么提示? /*public void updateSong(String id) { Set<String> keySet = map.keySet(); System.out.println("请输入修改后的名称:"); String name = sc.next(); System.out.println("请输入修改后的演唱者:"); String singer = sc.next(); for(String key:keySet) { PlayList playList = map.get(key); playList.updateSong(id,name,singer); System.out.println("修改成功!"); } }*/ //删除歌曲信息 /*public void deleteSong() { System.out.println("请输入要删除的歌曲id:"); String id = sc.next(); Set<String> keySet = map.keySet(); for(String key:keySet) { PlayList playList = map.get(key); playList.deleteSong(id); System.out.println("删除成功!"); } }*/ // 方法:显示所有播放列表名称 public void displayPlayList() { System.out.println("显示所有播放列表名称"); if(map.size()==0) { System.out.println("当前播放列表为空!"); }else { Set<Entry<String,PlayList>> entrySet = map.entrySet(); for(Entry<String,PlayList> entry:entrySet) { System.out.println(entry.getKey()); } } } //判断播放列表是否存在 public boolean booleanList(String listName) { boolean flag=false; Set<String> keySet = map.keySet(); for(String key:keySet) { if(key.equals(listName)) { flag = true; break; } } return flag; } }
package com.imooc.test;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import com.imooc.model.PlayList;
import com.imooc.model.PlayListCollection;
import com.imooc.model.Song;
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("********************************");
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("********************************");
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(" 5-返回上一级菜单");
System.out.println("********************************");
System.out.println("请输入对应数字进行操作:");
}
public static void main(String[] args) {
TestDemo test = new TestDemo();
Song song = new Song();
PlayList playList = new PlayList();
// PlayList playList1 = new PlayList();
PlayListCollection player = new PlayListCollection();
player.getMap().put("主播放列表", playList);
test.mainMenu();
Scanner sc = new Scanner(System.in);
boolean flag = true;
while (flag) {
int i = sc.nextInt();
switch (i) {
case 1:
test.playListMenu();
boolean flag1 = true;
while (flag1) {
int j = sc.nextInt();
switch (j) {
case 1:
// 将主播放列表设置为默认存在的
System.out.println("将歌曲添加到主播放列表:");
System.out.println("请输入添加歌曲数量:");
int x = sc.nextInt();
for (int y = 1; y <= x; y++) {
System.out.println("请输入第" + y + "首歌曲id:");
song.setId(sc.next());
System.out.println("请输入第" + y + "首歌曲名称:");
song.setName(sc.next());
System.out.println("请输入第" + y + "首演唱者:");
song.setSinger(sc.next());
playList.addToPlayList(song);
player.getMap().put("主播放列表", playList);
song = new Song();
}
// playList = new PlayList();
test.playListMenu();
break;
case 2:
System.out.println("将歌曲添加到普通播放列表:");
if (player.getMap().size() == 1 && player.getMap().containsKey("主播放列表")) {
System.out.println("还未创建普通播放列表!");
} else {
System.out.println("请输入要添加的播放列表名称:");
String name = sc.next();
// boolean flag3 = player.booleanList(name);
boolean flag3 = true;
for(String key:player.getMap().keySet()) {
if(key.equals(name)) {
flag3=false;
PlayList playList1 = player.getMap().get(key);
System.out.println("请输入要添加的歌曲数量:");
int n = sc.nextInt();
for (int m = 1; m <= n; m++) {
System.out.println("请输入第" + m + "首歌曲id:");
String id = sc.next();
boolean f = true;
PlayList pl = player.getMap().get("主播放列表");
for (int a = 0; a < pl.getMusicList().size(); a++) {
Song s = pl.getMusicList().get(a);
if (s.getId().equals(id)) {
System.out.println("第" + m + "首歌曲添加成功");
playList1.addToPlayList(s);
f = false;
break;
}
}
if (f) {
System.out.println("该歌曲在主播放列表中不存在,请继续输入其他信息");
// 此时添加的歌曲也要加进主播放列表中
song.setId(id);
System.out.println("请输入歌曲名称:");
song.setName(sc.next());
System.out.println("请输入演唱者");
song.setSinger(sc.next());
playList1.addToPlayList(song);
playList.addToPlayList(song);
System.out.println("第" + m + "首歌曲添加成功");
player.getMap().put("主播放列表", playList);
song = new Song();
}
}
player.getMap().put(name, playList1);
System.out.println("歌曲添加成功!");
break;
}
}
if (flag3) {
System.out.println("该播放列表不存在!");
}
}
test.playListMenu();
break;
case 3:
System.out.println("请输入要查询的播放列表:");
String listName = sc.next();
boolean flag3 = player.booleanList(listName);
if (flag3) {
System.out.println("请输入要查询的歌曲id:");
String id = sc.next();
player.searchSongById(id, listName);
} else {
System.out.println("该播放列表不存在!");
}
test.playListMenu();
break;
case 4:
System.out.println("请输入要查询的播放列表:");
String listName2 = sc.next();
boolean flag4 = player.booleanList(listName2);
if (flag4) {
System.out.println("请输入要查询的歌曲名称:");
String name = sc.next();
player.searchSongById(name, listName2);
} else {
System.out.println("该播放列表不存在!");
}
test.playListMenu();
break;
case 5:
// 修改一个列表之后,其他所有列表信息都随之改变
System.out.println("请输入要修改的歌曲id:");
String id1 = sc.next();
System.out.println("请输入修改后的歌曲名称:");
String name1 = sc.next();
System.out.println("请输入修改后的演唱者:");
String singer1 = sc.next();
boolean flag5 = true;
for (String key : player.getMap().keySet()) {
Song song1 = player.getMap().get(key).searchSongById(id1);
if (song1 == null) {
System.out.println("id不存在");
} else {
player.getMap().get(key).updateSong(song1, name1, singer1);
}
}
test.playListMenu();
break;
case 6:
// 在普通播放列表删除歌曲之后,主播放列表及其他列表中信息不变
// 在主播放列表中删除歌曲后,普通播放列表中的歌曲也随之删除
System.out.println("请输入要删除的歌曲id:");
boolean flag6 = true;
String id2 = sc.next();
for (String key : player.getMap().keySet()) {
List<Song> list = player.getMap().get(key).getMusicList();
for (int b = 0; b < list.size(); b++) {
if (id2.equals(list.get(b).getId())) {
player.getMap().get(key).deleteSong(id2);
System.out.println("删除成功!");
flag6 = false;
break;
}
}
}
if (flag6) {
System.out.println("id不存在!");
}
test.playListMenu();
break;
case 7:
System.out.println("请输入要显示的播放列表:");
String listName1 = sc.next();
boolean flag7 = player.booleanList(listName1);
if (flag7) {
player.searchPlayListByName(listName1);
} else {
System.out.println("该播放列表不存在!");
}
test.playListMenu();
break;
case 8:// 对象序列化,列表名称+的歌单.txt
System.out.println("请输入要导出的歌单:");
test.playListMenu();
break;
case 9:
flag1 = false;
test.mainMenu();
break;
default:
System.out.println("输入信息不正确,请重新输入");
break;
}
}
break;
case 2:
test.playerMenu();
boolean flag2 = true;
while (flag2) {
int k = sc.nextInt();
switch (k) {
case 1:
player.addPlayList(playList);
test.playerMenu();
break;
case 2:
player.deletePlayList(playList);
test.playerMenu();
break;
case 3:
System.out.println("请输入要查询的播放列表名称:");
String playListName = sc.next();
player.searchPlayListByName(playListName);
test.playerMenu();
break;
case 4:
player.displayPlayList();
test.playerMenu();
break;
case 5:
flag2 = false;
test.mainMenu();
break;
default:
System.out.println("输入信息不正确,请重新输入!");
test.playerMenu();
break;
}
}
break;
case 0:
flag = false;
break;
default:
System.out.println("输入信息不正确,请重新输入!");
test.mainMenu();
break;
}
}
}
}按照老师提供的思路,往普通列表添加歌曲时,先遍历集合判断该列表是否存在,然后获取该列表的playList,但是我的代码出现了问题
正在回答
修改意见,
1、如下图所示,创建一个主播放列表对象,为了形象一点,我起名为mainPlayList,然后将mainPlayList对象添加到播放器中。
在case1中,需要将歌曲信息添加到主播放列表中,所以使用mainPlayList对象调用addPlayList方法将歌曲信息添加进主播放列表中,可以参照下图进行修改。
然后在case2中,当获得普通播放列表的对象时,使用普通播放列表对象调用addToPlayList方法,这样你的歌曲信息就不会乱了,建议你在代码中添加适量的注释,不要定义那么多相似的变量信息,很容易搞混。
2、在searchPlayListByName方法中你不应该只返回null,可以这么修改,如果在该方法中有对应的播放列表,就返回该播放列表的对象,如果没有则返回null,这样在测试类中,我们就可以通过该方法返回的值进行操作了,譬如case2中的逻辑可以这么写,当从控制台接收用户录入的播放列表名称时,我们可以调用该方法,如果播放列表存在,则返回该播放列表的对象,然后使用该对象调用添加歌曲的方法,如果播放列表不存在,则返回null,则提示用户该播放列表不存在,这种逻辑就清晰简单。如果有不明白的地方还可以继续提问,祝学习愉快~
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星