老师可以帮我看一下代码吗?我的的播放器列表管理3、4、5、6这几个功能都显示查不到歌曲,但是我单独测试查询功能是正常的
来源:4-3 向普通播放列表添加歌曲
Ternence_T
2021-02-06 16:15:50
package player;
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;
}
// 属性的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;
}
// 重写toString方法,输出歌曲歌曲信息
@Override
public String toString() {
return "歌曲信息 歌曲ID:" + id + " 歌曲名称:" + name + " 演唱者:" + 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) {
// 判断对象是否相等,相等直接返回true
if (obj == this) {
return true;
}
if (obj.getClass() == Song.class) {
Song song = (Song) obj;
return (song.getId().equals(id)) && (song.getName().equals(name))
&& (song.getSinger().equals(singer));
}
return false;
}
}
package player;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class PlayList {
private String palyListName; // 播放列表名称
private List<Song> musicList; // 歌曲列表
/**
* 构造方法
*
* @param palyListName 播放列表名称
*/
public PlayList(String palyListName) {
this.palyListName = palyListName;
this.musicList = new ArrayList<Song>();
}
//getter和setter方法
public String getPalyListName() {
return palyListName;
}
public void setPalyListName(String palyListName) {
this.palyListName = palyListName;
}
public List<Song> getMusicList() {
return musicList;
}
public void setMusicList(List<Song> musicList) {
this.musicList = musicList;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((musicList == null) ? 0 : musicList.hashCode());
result = prime * result + ((palyListName == null) ? 0 : palyListName.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if(obj.getClass()==this.getClass()) {
PlayList playList = (PlayList)obj;
return playList.getPalyListName().equals(this.getPalyListName())&&playList.getMusicList().equals(this.getMusicList());
}
return false;
}
/**
* 将歌曲添加到播放列表
*
* @param song 要添加的歌曲
*/
public void addToPlayList(Song song) {
// 判断是否是重复歌曲
boolean flag = false;
for (Song song_1 : musicList) {
if (song_1.equals(song)) {
flag = true;
break;
}
}
if (flag) {
System.out.println("此歌曲已经存在于:"+getPalyListName());
System.out.println(song);
System.out.println("==========================");
} else {
musicList.add(song);
}
}
/**
* 显示播放列表中歌曲
*/
public void displayAllSong() {
for (Song song : musicList) {
System.out.println(song);
}
}
/**
* 通过ID查询歌曲的方法
*
* @param id 查询的ID
* @return 歌曲信息
*/
public Song searchSongById(String id) {
Song song = null;
for (Song song2 : this.musicList) {
if (song2.getId() == id) {
song = song2;
break;
}
}
return song;
}
/**
* 通过名称查询歌曲的方法
*
* @param name 歌曲名称
* @return 歌曲信息
*/
public Song searchSongByName(String name) {
Song song = null;
for (Song sg : this.musicList) {
if (sg.getName() == name) {
song = sg;
break;
}
}
return song;
}
/**
* 修改歌曲
*
* @param id 需要修改的歌曲ID
* @param song 新的歌曲
*/
public void updateSong(String id, Song song) {
Song son3= searchSongById(id);
if(son3==null) {
System.out.println("没有找到歌曲ID为:"+id+"的歌曲");
}else {
musicList.remove(son3);
musicList.add(song);
System.out.println("歌曲更新成功!");
}
}
/**
* 从播放列表删除歌曲
*
* @param id 歌曲ID
*/
public void deleteSong(String id) {
Song song=searchSongById(id);
if(song==null) {
System.out.println("没有找到歌曲ID为:"+id+"的歌曲");
}else {
musicList.remove(song);
System.out.println("删除成功!");
}
}
}
package player;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class PlayListCollection {
private Map<String, PlayList> playListMap; // 存放播放列表集合
// 构造方法
public PlayListCollection() {
this.playListMap = new HashMap<String, PlayList>();
}
// getter和setter方法
public Map<String, PlayList> getPlayListMap() {
return playListMap;
}
public void setPlayListMap(Map<String, PlayList> playListMap) {
this.playListMap = playListMap;
}
/**
* 添加播放列表到播放器
*
* @param playList 要添加的播放列表
*/
public void addPlayList(PlayList playList) {
PlayList playList2 = searchPlayList(playList.getPalyListName());
if (playList2 == null) {
playListMap.put(playList.getPalyListName(), playList);
if(!playList.getPalyListName().equals("主播放列表")) {
System.out.println("播放列表添加成功!");
}
} else {
System.out.println("歌单名为:" + playList.getPalyListName() + "的歌单已存在!");
}
}
/**
* 删除播放器列表
*
* @param playList 要删除的播放器列表
*/
public void delete(PlayList playList) {
PlayList playList2 = searchPlayList(playList.getPalyListName());
if (playList2 != null) {
playListMap.remove(playList.getPalyListName());
} else {
System.out.println("歌单名为:" + playList.getPalyListName() + "的歌单不存在!");
}
}
/**
* 通过名字查询播放器列表
*
* @param playListName 要查询的播放列表
* @return 返回查询到的播放列表
*/
public PlayList searchPlayList(String playListName) {
PlayList playList = null;
Set<String> set = playListMap.keySet();
for (String string : set) {
if (string.equals(playListName)) {
playList = (PlayList)playListMap.get(string);
break;
}
}
return playList;
}
// 显示所有播放列表的名称
public void dispalyPlayListName() {
Set<String> set = playListMap.keySet();
System.out.println("播放列表名称为:");
for (String string : set) {
System.out.println(string);
}
}
}
package player;
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {
Scanner sc = new Scanner(System.in);
PlayListCollection plc = new PlayListCollection();
PlayList mainPlayList = new PlayList("主播放列表");
PlayList playList;
Song song;
int num;
String playListName;
// 歌曲测试
public void songTest() {
Song song_1 = new Song("s001", "小星星", "A");
Song song_2 = new Song("s002", "两只老虎", "B");
Song song_3 = new Song("s003", "小太阳", "C");
Song song_4 = new Song("s004", "小兔子", "D");
// 测试toString方法
// System.out.println(song_1);
// 测试两个对象是否相等
// System.out.println("song_1==song_2:"+song_1.equals(song_2));
// System.out.println("song_1==song_4:"+song_1.equals(song_4));
PlayList playList = new PlayList("主播放列表");
// 添加歌曲到播放列表
playList.addToPlayList(song_1);
playList.addToPlayList(song_2);
playList.addToPlayList(song_3);
// playList.addToPlayList(song_4);
// 显示所有歌曲
// playList.displayAllSong();
//
// 通过ID查询歌曲
// playList.searchSongById("s005");
//
// playList.displayAllSong();
// 通过名字查询歌曲
System.out.println(playList.searchSongByName("小星星"));
//
// 更新歌曲信息
// playList.updateSong("s001", song_4);
// playList.displayAllSong();
// 删除歌曲
// playList.deleteSong("s006");
// playList.displayAllSong();
}
// 播放列表测试
public void testPlayListCollection() {
Song song_1 = new Song("s001", "小星星", "A");
Song song_2 = new Song("s002", "两只老虎", "B");
Song song_3 = new Song("s003", "小太阳", "C");
Song song_4 = new Song("s004", "小兔子", "D");
// 创建主播房列表
PlayList mainPlayList = new PlayList("主播放列表");
// 将歌曲添加到主播房列表
mainPlayList.addToPlayList(song_1);
mainPlayList.addToPlayList(song_2);
mainPlayList.addToPlayList(song_3);
// 将播放列表的歌曲添加到心得播放列表
PlayList favouritePlayList = new PlayList("最喜爱的歌曲");
favouritePlayList.addToPlayList(mainPlayList.getMusicList().get(0));
favouritePlayList.addToPlayList(mainPlayList.getMusicList().get(1));
favouritePlayList.addToPlayList(mainPlayList.getMusicList().get(2));
PlayListCollection plc = new PlayListCollection();
// 测试添加歌单功能
plc.addPlayList(mainPlayList);
plc.addPlayList(favouritePlayList);
plc.dispalyPlayListName();
// 测试查询功能
PlayList playList = plc.searchPlayList("最喜爱的歌曲");
playList.displayAllSong();
System.out.println("===========================");
// 测试删除歌单功能
plc.delete(favouritePlayList);
plc.dispalyPlayListName();
}
// 主菜单
public void mainMenu() {
int mainNumber = 0;
plc.addPlayList(mainPlayList);
while (true) {
System.out.println("*****************************************");
System.out.println(" 主菜单 ");
System.out.println(" 1--播放器列表管理 ");
System.out.println(" 2--播放器管理 ");
System.out.println(" 0--退出 ");
System.out.println("*****************************************");
System.out.println("请输入对应数字进行操作:");
try {
mainNumber = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("输入错误!请重新输入!");
sc.next();
continue;
}
if (mainNumber == 0) {
System.out.println("退出成功!");
break;
}
switch (mainNumber) {
case 1:
playListMenu();
break;
case 2:
playerMenu();
break;
default:
System.out.println("输入错误请重新输入:");
sc.next();
break;
}
}
}
// 播放列表菜单
public void playListMenu() {
int playListNumber;
while (true) {
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(" 9--放回上一级菜单 ");
System.out.println("********************************************");
System.out.println("请输入对应数字进行操作:");
try {
playListNumber = sc.nextInt();
// 9--放回上一级菜单
if (playListNumber == 9) {
break;
}
switch (playListNumber) {
// 1--将歌曲添加到主播放列表
case 1:
addSongToPlayList(mainPlayList);
System.out.println(mainPlayList.getPalyListName() + "中的歌曲为:");
mainPlayList.displayAllSong();
break;
// 2--将歌曲添加到普通播放列表
case 2:
System.out.println("请输入播放列表名称:");
playListName = sc.next();
playList = plc.searchPlayList(playListName);
if (playList == null) {
System.out.println("该播放列表不存在,是否添加?(Y/N)");
String choice = sc.next();
if (choice.equals("Y") || choice.equals("y")) {
playList = new PlayList(playListName);
addSongToPlayList(playList);
plc.addPlayList(playList);
System.out.println(playList.getPalyListName() + "中的歌曲为:");
playList.displayAllSong();
System.out.println(mainPlayList.getPalyListName()+"中的歌曲:");
mainPlayList.displayAllSong();
} else if (choice.equals("N") || choice.equals("n")) {
break;
}
} else {
addSongToPlayList(playList);
plc.addPlayList(playList);
System.out.println(playList.getPalyListName()+"中的歌曲:");
playList.displayAllSong();
if(!playList.getPalyListName().equals(mainPlayList.getPalyListName())) {
System.out.println(mainPlayList.getPalyListName()+"中的歌曲:");
mainPlayList.displayAllSong();
}
}
break;
// 3--通过歌曲ID查询播放列表中的歌曲
case 3:
System.out.println("请输入要查找的播放列表名称:");
playListName = sc.next();
playList = plc.searchPlayList(playListName);
if (playList == null) {
System.out.println("没有查询到此播放列表");
break;
} else {
System.out.println(playList.getPalyListName() + "中的歌曲为:");
playList.displayAllSong();
}
break;
// 4--通过歌曲名称查找播放列表中的歌曲
case 4:
System.out.println("请输入歌曲名称:");
String strName = sc.next();
System.out.println("请输入播放列表名称:");
playListName = sc.next();
playList = plc.searchPlayList(playListName);
if (playList == null) {
System.out.println("您没有此播放列表!");
break;
}else {
song= playList.searchSongByName(strName);
System.out.println(song);
}
break;
// 5--修改播放列表中的歌曲
case 5:
System.out.println("请输入播放器列表名称:");
playListName = sc.next();
playList = plc.searchPlayList(playListName);
if (playList == null) {
System.out.println("您没有此播放列表");
break;
}
playList.displayAllSong();
System.out.println("请输入要修改的歌曲ID:");
String songUpdateID = sc.next();
System.out.println("请输入修改后的歌曲ID:");
String songID = sc.next();
System.out.println("请输入修改后的歌曲名称:");
String songName = sc.next();
System.out.println("请输入修改后的歌手:");
String singer = sc.next();
song=new Song(songID, songName, singer);
playList.updateSong(songUpdateID,song);
playList.displayAllSong();
break;
// 6--删除播放列表中的歌曲
case 6:
System.out.println("请输入需要删除的歌曲ID:");
String strID = sc.next();
System.out.println("请输入播放列表名称:");
playListName = sc.next();
playList = plc.searchPlayList(playListName);
if (playList == null) {
System.out.println("您没有此播放列表!");
break;
}
playList.deleteSong(strID);
playList.displayAllSong();
break;
// 7--显示播放列表中的所有歌曲
case 7:
System.out.println("请输入需要显示的播放列表名称:");
playListName = sc.next();
playList = plc.searchPlayList(playListName);
if (playList == null) {
System.out.println("您没有此播放列表!");
break;
}
playList.displayAllSong();
break;
default:
System.out.println("输入错误请重新输入:");
break;
}
} catch (InputMismatchException e) {
System.out.println("输入错误!请重新输入!");
sc.next();
continue;
}
}
if (playListNumber == 9) {
mainMenu();
}
}
// 播放器管理
public void playerMenu() {
while (true) {
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 {
num = sc.nextInt();
if(num==9) {
break;
}
switch (num) {
// 1--向播放器添加播放列表
case 1:
System.out.println("请输入要添加的播放列表名称:");
playListName = sc.next();
playList = new PlayList(playListName);
plc.addPlayList(playList);
break;
// 2--从播放器删除播放列表
case 2:
System.out.println("请输入要删除的播放列表名称:");
playListName = sc.next();
playList = new PlayList(playListName);
plc.delete(playList);
break;
// 3--通过名字查询播放列表
case 3:
System.out.println("请输入要删除的播放列表名称:");
playListName = sc.next();
playList = plc.searchPlayList(playListName);
if (playList == null) {
System.out.println("没有查询到此播放列表!");
} else {
playList.displayAllSong();
}
break;
// 4--显示所有播放列表名称
case 4:
plc.dispalyPlayListName();
break;
default:
System.out.println("输入错误!请重新输入!");
break;
}
} catch (InputMismatchException e) {
System.out.println("输入错误!请重新输入!");
sc.next();
continue;
}
}
}
// 往播放列表中添加歌曲
public void addSongToPlayList(PlayList playList) {
System.out.println("请输入要添加的歌曲数量:");
int num_2 = sc.nextInt();
for (int i = 0; i < num_2; i++) {
System.out.println("请添加第" + (i + 1) + "首歌");
System.out.println("请输入歌曲的ID:");
String songId = sc.next();
System.out.println("请输入歌曲的名称:");
String songName = sc.next();
System.out.println("请输入歌手的名字:");
String songSinger = sc.next();
Song song = new Song(songId, songName, songSinger);
playList.addToPlayList(song);
if(!playList.getPalyListName().equals(mainPlayList.getPalyListName())) {
mainPlayList.addToPlayList(song);
}
}
System.out.println("添加成功!");
}
public static void main(String[] args) {
Test test = new Test();
test.mainMenu();
}
}
1回答
同学,你好!功能4找不到歌曲是因为:字符串内容的比较应该用equals,而不是==

功能5,6找不到歌曲,也是同样道理,修改为equals进行比较

另外功能3不存在同学描述的情况,同学可以再测试一下。祝:学习愉快!
相似问题
回答 2
回答 1