其他的播放列表会自动添加输入的歌曲信息,即使创建一个空的播放列表去显示,也会显示出之前添加的数据
package com.imooc.player;
import java.io.Serializable;
/**
* @author Administrator
*歌曲类
*/
public class Song implements Serializable{
/**
*
*/
private static final long serialVersionUID = 8928597047484314298L;
private String id; // 歌曲id
private String name; // 歌曲名
private String singer; // 演唱者
public Song() {
}
//构造方法,实现对歌曲ID,歌曲名,演唱者的赋值
public Song(String id, String name, String singer) {
this.id = id;
this.name = name;
this.singer = singer;
}
//get和set方法
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;
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 ;
}
}
package com.imooc.player;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author Administrator 播放列表类 属性: -播放列表名称(playListName):字符串类型
* -播放列表中的歌曲集合(musicList):List类型 方法: 构造方法 getter和setter方法
* 将歌曲添加到播放列表:public void addToPlayList(Song song); 显示播放列表中所有歌曲:public
* void displayAllSong(); 通过id查询歌曲:public Song searchSongById(String
* id); 通过名称查询歌曲:public Song searchSongByName(String n); 修改歌曲:public
* void updateSong(Stirng id,Song song); 从播放列表删除歌曲:public void
* deleteSong(String id); 导出歌单 :public void exportPlayList();
*/
public class PlayList {
private String playListName;// 播放列表名称
private List<Song> musicList; // 播放列表中的歌曲集合
Scanner sc = new Scanner(System.in);
// 无参构造
public PlayList() {
this.musicList = new ArrayList<>();
}
// 有参构造
public PlayList(List<Song> musicList) {
this.musicList = musicList;
}
// get和set方法
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;
}
/**
* 将歌曲添加到播放列表
*
* @param song
*/
public void addToPlayList(Song song) {
System.out.println("请输入要添加的歌曲的数量:");
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
boolean flag = true;
System.out.println("请输入第" + (i + 1) + "首歌曲:");
String str = null;
while (flag) {
System.out.println("请输入歌曲的id:");
str = sc.next();
if (musicList.size() == 0) {
System.out.println("请输入歌曲的名称:");
String name=sc.next();
System.out.println("请输入演唱者:");
String name1=sc.next();
Song son=new Song(str,name,name1);
musicList.add(son);
flag = false;
} else {
List<String> l = new ArrayList<>();
for (Song s : musicList) {
String id = s.getId();
l.add(id);
}
if (l.contains(str)) {
System.out.println("该歌曲id已存在,请重新输入:");
} else {
System.out.println("请输入歌曲的名称:");
String name=sc.next();
System.out.println("请输入演唱者:");
String name1=sc.next();
Song son=new Song(str,name,name1);
musicList.add(son);
flag = false;
}
}
}
}
}
/**
* 显示播放列表中的所有歌曲
*/
public void displayAllSong() {
if (getMusicList().size()==0) {
System.out.println("播放列表为空,没有歌曲信息!");
} else {
for (Song s : getMusicList()) {
System.out.println(s);
}
}
}
/**
* 通过id查询歌曲
*
* @param id
* @return
*/
public Song searchSongById(String id) {
boolean flag = true;
for (Song s : musicList) {
if (id.equals(s.getId())) {
System.out.println("该歌曲的信息为:\n" + s);
flag = false;
break;
}
}
if (flag) {
System.out.println("播放列表没有该歌曲!");
}
return null;
}
/**
* 通过名称查询歌曲
*
* @param name
* @return
*/
public Song searchSongByName(String name) {
boolean flag = true;
for (Song s : musicList) {
if (name.equals(s.getName())) {
System.out.println("该歌曲的信息为:\n" + s);
flag = false;
break;
}
}
if (flag) {
System.out.println("播放列表没有该歌曲!");
}
return null;
}
/**
* 修改歌曲
*
* @param id
* @param song
*/
public void updateSong(String id, Song song) {
boolean flag = true;
for (Song s : musicList) {
if (id.equals(s.getId())) {
System.out.println("请输入修改后的歌曲名:");
s.setName(sc.next());
System.out.println("请输入修改后的演唱者:");
s.setSinger(sc.next());
System.out.println("修改成功!");
flag = false;
break;
}
}
if (flag) {
System.out.println("要修改的歌曲不存在!");
}
}
/**
* 从播放列表删除歌曲
*
* @param id
*/
public void deleteSong(String id) {
boolean flag = true;
for (Song s : musicList) {
if (id.equals(s.getId())) {
musicList.remove(s);
System.out.println("删除成功!");
flag = false;
return;
}
}
if (flag) {
System.out.println("要删除的歌曲已不存在!");
}
}
/**
* 导出歌单
*/
public void exportPlayList() {
try {
FileOutputStream fos = new FileOutputStream(playListName + "的歌单.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(musicList);
oos.flush();
oos.close();
System.out.println("导出成功!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.imooc.player;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
/**播放器类
* @author Administrator
* 属性:
* - 存放播放列表的集合(playListMap):Map
* 方法:
* -构造方法
* -getter和setter方法
* -添加播放列表:public void addPlayList(PlayList playList);
* -删除播放列表:public void deletePlayList(PlayList playList);
* -通过名字查询:public PlayList searchPlayListByName(String playListName);
* -显示所有播放列表名称:public void displayPlayListName();
*/
public class PlayListCollection {
private Map<String,PlayList> playListMap;
Scanner sc=new Scanner(System.in);
//无参构造
public PlayListCollection() {
this.playListMap=new HashMap<>();
}
//有参构造
public PlayListCollection(Map<String,PlayList> playListMap) {
this.playListMap=playListMap;
}
//get和set方法
public Map<String, PlayList> getPlayListMap() {
return playListMap;
}
public void setPlayListMap(Map<String, PlayList> playListMap) {
this.playListMap = playListMap;
}
/**添加播放列表
* @param playList
*/
public void addPlayList(PlayList playList) {
System.out.println("输入要添加的播放列表名称:");
String name=sc.next();
if(playListMap.containsKey(name)) {
System.out.println("该播放列表已存在!");
}else {
playListMap.put(name, playList);
System.out.println("添加成功!");
}
}
/**删除播放列表
* @param playList
*/
public void deletePlayList(PlayList playList) {
System.out.println("输入要删除的播放列表名称:");
String n=sc.next();
if(playListMap.containsKey(n)) {
playListMap.remove(n);
System.out.println("删除成功!");
}else {
System.out.println("没有要找的播放列表!");
}
}
/**通过名字查询播放列表
* @param playListName
* @return
*/
public PlayList searchPlayListByName(String playListName) {
PlayList playList=null;
if(playListMap.containsKey(playListName)) {
System.out.println("该播放列表存在!\n列表中的歌曲信息为:");
playList= playListMap.get(playListName);
}else {
System.out.println("没有找到要查询的播放列表!");
}
return playList;
}
/**
* 显示所有播放列表名称
*/
public void displayPlayListName() {
System.out.println("播放器中的播放列表信息如下:");
if(playListMap.size()==0) {
System.out.println("播放器为空!");
}else {
Set<String> keySet=playListMap.keySet();
for(String n:keySet) {
System.out.println(n);
}
}
}
}
package com.imooc.player;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;
/**
* 包含对歌曲类、播放列表类以及播放器类的测试方法以及对主流程的控制
*
* @author Administrator
*
*/
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) {
Song song = new Song();
PlayList playList = new PlayList();
PlayListCollection plc = new PlayListCollection();
TestDemo test = new TestDemo();
Scanner s = new Scanner(System.in);
boolean flag = true;
while (flag) {
test.mainmenu(); // 主菜单
int i = s.nextInt();
switch (i) {
case 1:
boolean flag1 = true;
// test.playlistmenu(); //播放列表管理菜单
while (flag1) {
test.playlistmenu();
i = s.nextInt();
switch (i) {
case 1:
if (plc.getPlayListMap().containsKey("主播放列表")) {
System.out.println("将歌曲添加到主播放列表:");
playList.addToPlayList(song);
plc.getPlayListMap().put("主播放列表", playList);
System.out.println("歌曲添加成功!");
} else {
playList.setPlayListName("主播放列表");
plc.getPlayListMap().put(playList.getPlayListName(), playList);
System.out.println("将歌曲添加到主播放列表:");
playList.addToPlayList(song);
plc.getPlayListMap().put("主播放列表", playList);
System.out.println("歌曲添加成功!");
}
break;
case 2:
System.out.println("将歌曲添加到普通播放列表!");
System.out.println("请输入要添加的播放列表名称:");
String name = s.next();
if (plc.getPlayListMap().size() == 1 && plc.getPlayListMap().containsKey("主播放列表")) {
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
} else {
if (plc.getPlayListMap().containsKey(name)) {
playList.addToPlayList(song);
plc.getPlayListMap().put(name, playList);
System.out.println("歌曲添加成功!");
} else {
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
}
}
break;
case 3:
System.out.println("通过歌曲id查询播放列表中的歌曲");
System.out.println("请输入要查询的播放列表:");
String n = s.next();
if (plc.getPlayListMap().containsKey(n)) {
System.out.println("请输入要查询的歌曲id:");
String id = s.next();
playList.searchSongById(id);
} else {
System.out.println("没有要查询的播放列表!");
}
break;
case 4:
System.out.println("通过歌曲名称查询播放列表中的歌曲");
System.out.println("请输入要查询的播放列表:");
String m = s.next();
if (plc.getPlayListMap().containsKey(m)) {
System.out.println("请输入要查询的歌曲名称:");
String name1 = s.next();
playList.searchSongByName(name1);
} else {
System.out.println("没有要查询的播放列表:");
}
break;
case 5: // 修改一个歌曲信息之后,其他的列表信息也被修改
System.out.println("请输入要修改的歌曲id:");
String id = s.next();
Iterator<String> keyIt = plc.getPlayListMap().keySet().iterator();
while (keyIt.hasNext()) {
String keyName = keyIt.next();
playList = plc.getPlayListMap().get(keyName);
playList.updateSong(id, song);
}
break;
case 6:
System.out.println("请输入要删除的歌曲所在的播放列表:");
n = s.next();
if (plc.getPlayListMap().containsKey(n)) {
if (n.equals("主播放列表")) {
System.out.println("请输入要删除的歌曲id:");
id = s.next();
Iterator<String> keyIt1 = plc.getPlayListMap().keySet().iterator();
while (keyIt1.hasNext()) {
String keyName = keyIt1.next();
playList = plc.getPlayListMap().get(keyName);
playList.deleteSong(id);
}
} else {
System.out.println("请输入要删除的歌曲id:");
id = s.next();
plc.getPlayListMap().get(n).deleteSong(id);
}
} else {
System.out.println("没有这个播放列表!");
}
break;
case 7:
System.out.println("显示播放列表中的歌曲:");
System.out.println("请输入要显示的播放列表:");
n = s.next();
plc.searchPlayListByName(n);
playList.displayAllSong();
break;
case 8:
playList.exportPlayList();
break;
case 9:
flag1 = false;
break;
default:
System.out.println("输入信息不正确,请重新输入:");
break;
}
}
break;
case 2:
boolean flag6 = true;
// test.playermenu(); //播放器菜单
while (flag6) {
test.playermenu();
i = s.nextInt();
switch (i) {
case 1:
System.out.println("向播放器中添加播放列表");
plc.addPlayList(playList);
break;
case 2:
System.out.println("从播放器中删除播放列表");
plc.deletePlayList(playList);
break;
case 3:
System.out.println("通过名字查询播放列表信息");
System.out.println("请输入要查询的播放列表名称:");
String playListName=s.next();
plc.searchPlayListByName(playListName);
playList.displayAllSong();
break;
case 4:
System.out.println("显示所有播放列表名称");
plc.displayPlayListName();
break;
case 5:
flag6 = false;
break;
default:
System.out.println("输入信息不正确,请重新输入:");
break;
}
}
break;
case 0:
System.out.println("退出成功!");
flag = false;
System.exit(0);
default:
System.out.println("输入信息有误,请重新输入:");
}
}
}
}
正在回答
在显示播放列表中的歌曲时,playList.displayAllSong();这时的playList指的是普通列表,所以只显示普通播放列表的信息。应该用一个新的PlayList对象来接收返回的播放列表名称,用新的对象来显示歌曲信息。代码如下:
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星