4-7作业问题
Song类:
package com.imooc.player;
public class Song implements Comparable<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() {
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) {
// 判断对象是否相等,相等则返回true;
if (this == obj) {
return true;
}
// this!=obj,进行判断
if (obj.getClass() == Song.class) {
Song song = (Song) obj;
return (song.getId().equals(id)) && (song.getName().equals(name)) && (song.getSinger().equals(singer));
}
return false;
}
public String toString() {
return "歌曲信息:id为:" + this.getId() + ",歌曲名称:" + this.getName() + ",演唱者为:" + this.getSinger();
}
@Override
public int compareTo(Song o) {
String name1=this.getName();
String name2=o.getName();
int n=name1.compareTo(name2);
return n;
}
}
PlayList 类:
package com.imooc.player;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class PlayList {
private String playListName;// 播放列表的名称
private List<Song> musicList; // 播放列表的歌曲集合;
/**
* 构造方法
*
* @param playListName 播放器列表名称
*/
public PlayList(String playListName) {
this.playListName = playListName;
musicList = new ArrayList<Song>();
}
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) {
// 要排除重复添加的情况
boolean flag = false;// 判断播放列表中的歌曲是否存在
for (Song song1 : musicList) {
if (song1.equals(song)) {
flag = true;
break;
}
}
if (flag) {
System.out.println("该歌曲已存在于播放列表中,添加失败!");
} else {
musicList.add(song);
}
}
/**
* 通过歌曲的id查询
*
* @param id 歌曲id
* @return 查询到的歌曲信息
*/
public Song searchSongById(String id) {
Song song = null;
// ID是唯一的
for (Song song1 : musicList) {
if (song1.getId().equals(id)) {
// 如果相同就是找到了
song = song1;
break;
}
}
return song;
}
public void updateSong(String id, Song song) {
// 根据id查询到相关的歌曲信息,然后再进行修改
Song song1 = searchSongById(id);
if (song1 == null) {
System.out.println("没有找到id为:" + id + "对应的歌曲信息!");
} else {
// 先移除原来的信息,然后再重新添加
musicList.remove(song1);
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);
}
}
/**
* 根据歌曲的名字查询
*
* @param name 歌曲名称
* @return 查询到的歌曲信息
*/
public Song searchSongByName(String name) {
Song song = null;
for (Song song1 : musicList) {
if (song1.getName().equals(name)) {
song = song1;
break;
}
}
return song;
}
/**
* 显示播放列表中的所有歌曲
*/
public void displayAllSong() {
System.out.println("播放列表中的所有歌曲为:");
for (Song song : musicList) {
System.out.println(song);
}
}
public void sortBySongName() {
Collections.sort(musicList);
}
}
PlayListCollction类:
package com.imooc.player;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* 播放列表集合
*
* @author nieyafei
*
*/
public class PlayListCollection {
// String 键 指的是播放器列表的名称,也就是playListName
// playList 值,指的是播放器列表中歌曲的信息;
Map<String, PlayList> playListMap;// 存放播放器列表的集合
// 构造方法
public PlayListCollection() {
playListMap = new HashMap<String, PlayList>();
}
// get方法
public Map<String, PlayList> getPlayListMap() {
return playListMap;
}
public void setPlayListMap(Map<String, PlayList> playListMap) {
this.playListMap = playListMap;
}
/**
* 向播放列表集合(也就是播放器)去添加播放列表;
*
* @param playLis 要添加的播放列表;
*/
public void addPlayList(PlayList playList) {
// Key值是 :PlayListName,播放列表的名称;
// Value值是: playList集合中(播放列表)的信息;
playListMap.put(playList.getPlayListName(), playList);
}
/**
* 删除播放列表
*
* @param playList 要删除的播放列表的对象
*/
public void deletePlayList(PlayList playList) {
// 通过key值去删除播放列表信息:
playListMap.remove(playList.getPlayListName());
// 给提示信息
System.out.println("删除成功!");
}
/**
* 通过播放列表的名称查询播放列表
*
* @param playListName 播放列表名称
* @return 播放列表;
*/
public PlayList searchPlayListByName(String playListName) {
PlayList playList = null;
// 查询当前播放列表的名字是否在集合中存在
// 把key的值也就是播放列表名字的值全部取出并赋值
// Set<String> playListSet = playListMap.keySet();
// for (String s : playListSet) {
// if (s.equals(playListName)) {
// // 通过找key值找到对应的value值;2
// playList = playListMap.get(s);
// break;
// }
// }
//通过迭代器方法:
Iterator<String> it=playListMap.keySet().iterator();
while(it.hasNext()) {
String key=it.next();
if(key.equals(playListName)) {
playList=playListMap.get(key);
}
}
return playList;
}
/**
* 显示所有播放列表的名称
*/
public void displayPlayListName() {
// 取出所有的播放列表的名称
Set<String> playListSet = playListMap.keySet();
System.out.println("播放列表名称为:");
for (String s : playListSet) {
System.out.println(s);
}
}
测试类:
package com.imooc.player;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.InputMismatchException;
import java.util.Scanner;
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 void test() throws InputMismatchException {
TestDemo td = new TestDemo();
Scanner sc = new Scanner(System.in);
// 需要3个变量接收数据
int input = 0, input1 = 0, input2 = 0;
// 创建播放列表容器(也就是播放器)
PlayListCollection plc = new PlayListCollection();
// 创建主播放列表
PlayList mainPlayList = new PlayList("主播放列表");
// 将播放列表添加到播放器中,之后在case语句中再把歌曲添加到播放列表中
plc.addPlayList(mainPlayList);
// 定义其他播放列表存储歌曲
PlayList favouritePlayList = null;
while (true) {
td.mainMenu();
System.out.println("请输入对应的数字:");
// try {
input = sc.nextInt();
if (input == 0) {
break;
}
// }catch (InputMismatchException e) {
// System.out.println("输入信息有误,只可输入整数,请重新输入!");
// sc.next();
// }
switch (input) {
case 1:
// 播放列表
while (true) {
td.playListMenu();
System.out.println("请输入对应的数字:");
input1 = sc.nextInt();
if (input1 == 9) {
break;
}
switch (input1) {
case 1:
System.out.println("将歌曲添加到主播放列表");
System.out.println("请输入要添加歌曲的数量:");
int count = sc.nextInt();
for (int i = 1; i <= count; i++) {
System.out.println("请输入第" + i + "首歌曲:");
System.out.println("请输入歌曲的id:");
String strId = sc.next();
System.out.println("请输入歌曲的名称:");
String strName = sc.next();
System.out.println("请输入演唱者:");
String strSinger = sc.next();
// 创建歌曲的对象
Song song = new Song(strId, strName, strSinger);
// 把创建好的歌曲添加到主播放列表中
mainPlayList.addToPlayList(song);
// 测试
// mainPlayList.displayAllSong();
}
break;
case 2:
System.out.println("将歌曲添加到普通播放列表");
System.out.println("请输入要添加播放列表名称");
String sName = sc.next();
// 根据名称判断播放列表是否在播放器中存在
favouritePlayList = plc.searchPlayListByName(sName);
if (favouritePlayList == null) {
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
} else {
System.out.println("请输入需要添加歌曲的数量:");
int count1 = sc.nextInt();
for (int i = 1; i <= count1; i++) {
System.out.println("请输入第" + i + "首歌曲:");
System.out.println("请输入歌曲的id:");
String strId = sc.next();
// 判断该ID的歌曲是否在主播放列表中存在
Song song = mainPlayList.searchSongById(strId);
if (song == null) {
// 如果歌曲不存在,则创建新的添加,并且添加到主播放列表
System.out.println("该歌曲在主播播放列表中不存在,继续输入其他歌曲信息!");
System.out.println("请输入歌曲名称:");
String strName = sc.next();
System.out.println("请输入演唱者:");
String strSinger = sc.next();
// 创建一个Song类的对象
song = new Song(strId, strName, strSinger);
// 把Song类的对象添加到普通播放列表,和主播放列表中
mainPlayList.addToPlayList(song);
favouritePlayList.addToPlayList(song);
} else {
// 如果歌曲存在于主播放列表,则直接添加到现在的播放列表中
System.out.println("歌曲信息已存在,无需再次添加!");
favouritePlayList.addToPlayList(song);
}
} // 显示播放列表中的歌曲信息
System.out.println("主播放列表: ");
mainPlayList.displayAllSong();
System.out.println("普通播放列表:");
favouritePlayList.displayAllSong();
}
break;
case 3:
System.out.println("通过歌曲id查询播放列表中的歌曲");
System.out.println("请输入要查询的播放列表名称:");
String strPlayListName1 = sc.next();
// 查询播放列表是否存在
PlayList pl = plc.searchPlayListByName(strPlayListName1);
if (pl == null) {
System.out.println("该播放列表不存在!");
break;
} else {
System.out.println("请输入要查询的歌曲id:");
String strId1 = sc.next();
Song s = pl.searchSongById(strId1);
if (s == null) {
System.out.println("该歌曲在播放列表" + strPlayListName1 + "中不存在");
} else {
System.out.println("该歌曲的信息为:");
System.out.println(s);
}
}
break;
case 4:
System.out.println("通过歌曲名称查询播放列表中的歌曲");
System.out.println("请输入需要查询的播放器名称:");
String strPlayListName = sc.next();
// 判断播放器列表是否存在
pl = plc.searchPlayListByName(strPlayListName);
if (pl == null) {
System.out.println("该播放列表不存在!");
break;
} else {
System.out.println("请输入要查询的歌曲的名称:");
String strName = sc.next();
Song s = pl.searchSongByName(strName);
if (s == null) {
System.out.println("该歌曲在播放列表" + strPlayListName + "中不存在");
} else {
System.out.println("该歌曲的信息为:");
System.out.println(s);
}
}
break;
case 5:
System.out.println("修改播放列表中的歌曲");
System.out.println("请输入播放列表名称:");
String strPlayListName2 = sc.next();
// 首先查询播放列表名称
pl = plc.searchPlayListByName(strPlayListName2);
// 进行判断,如果为空,则无此播放列表,无法删除
if (pl == null) {
System.out.println("该播放列表不存在,无法修改" + strPlayListName2 + "列表中的歌曲!");
} else {
System.out.println("请输入需要修改歌曲的id:");
String strId = sc.next();
Song s = pl.searchSongById(strId);
if (s == null) {
System.out.println(strPlayListName2 + "列表中无此id的歌曲,无法修改!");
} else {
System.out.println("请输入修改歌曲的名称:");
String strName = sc.next();
System.out.println("请输入修改歌曲的演唱者:");
String strSinger1 = sc.next();
Song s1 = new Song(strId, strName, strSinger1);
pl.updateSong(strId, s1);
}
}
System.out.println("修改后:");
pl.displayAllSong();
break;
case 6:
System.out.println("删除播放列表中的歌曲");
System.out.println("请输入播放列表名称:");
String strPlayListName3 = sc.next();
// 查询要删除的播放列表是否存在
pl = plc.searchPlayListByName(strPlayListName3);
if (pl == null) {
System.out.println("该播放列表不存在,无法删除" + strPlayListName3 + "列表中的歌曲!");
} else {
// 通过歌曲ID删除此播放列表中的歌曲
System.out.println("请输入需要删除歌曲的id:");
String strId = sc.next();
Song s = pl.searchSongById(strId);
if (s == null) {
System.out.println("此播放列表中无" + strId + "的歌曲信息");
} else {
pl.deleteSong(strId);
}
}
System.out.println("删除后:");
pl.displayAllSong();
break;
case 7:
System.out.println("显示播放列表中的歌曲");
System.out.println("请输入播放列表名称:");
String strPlayListName4 = sc.next();
pl = plc.searchPlayListByName(strPlayListName4);
if (pl == null) {
System.out.println("无" + strPlayListName4 + "列表的信息!");
} else {
pl.displayAllSong();
}
break;
case 8:
// 根据歌单名称将歌单信息导出为“名称.txt"文件到项目的根目录下
System.out.println("请输入需要导出的歌单名称:");
String strPlayListName5 = sc.next();
pl = plc.searchPlayListByName(strPlayListName5);
if (pl == null) {
System.out.println("没有此" + strPlayListName5 + "列表的信息!");
} else {
try {
// 创建文件输出流,并通过对象输出流传入;
FileOutputStream fos = new FileOutputStream(strPlayListName5 + ".txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
// 将信息写入文件中
for (Song s : pl.getMusicList()) {
oos.writeObject(s);
}
oos.writeObject(null);
oos.flush();
fos.close();
oos.close();
// 将信息读取出来
// 创建文件输入流,并通过对象输入流读取信息
FileInputStream fis = new FileInputStream(strPlayListName5 + ".txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Song s = null;
while ((s = (Song) ois.readObject()) != null) {
System.out.println("菜单" + s);
}
fis.close();
ois.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
}
}
break;
default:
System.out.println("该歌曲没有对应的操作");
break;
}
}
break;
case 2:
// 播放器
while (true) {
td.playerMenu();
System.out.println("请输入对应的数字:");
input2 = sc.nextInt();
if (input2 == 9) {
break;
}
switch (input2) {
case 1:
System.out.println("向播放器添加播放列表");
System.out.println("请输入要添加的播放列表名称:");
String playerName = sc.next();
// 创建一个新的播放列表
favouritePlayList = new PlayList(playerName);
// 把新创建的播放列表添加到map中,也就是播放器中
plc.addPlayList(favouritePlayList);
break;
case 2:
System.out.println("从播放器删除播放列表");
System.out.println("请输入要删除的播放列表名称:");
String strPlayListName = sc.next();
if (strPlayListName.equals("主播放列表")) {
System.out.println("主播放列表不能删除");
}
// 查询播放列表是否存在
PlayList pl = plc.searchPlayListByName(strPlayListName);
if (pl == null) {
System.out.println("该播放列表不存在!");
} else {
// 存在则删除
plc.deletePlayList(pl);
}
break;
case 3:
System.out.println("通过名字查询播放列表信息");
System.out.println("请输入需要查询的播放列表名称:");
String strPlayListName2=sc.next();
pl=plc.searchPlayListByName(strPlayListName2);
if(pl==null) {
System.out.println("该播放列表不存在");
}else {
//显示该播放列表名称及其中的所有歌曲
System.out.println("该播放列表存在!");
System.out.println("该播放列表的名称为:"+strPlayListName2);
pl.displayAllSong();
}
break;
case 4:
System.out.println("显示所有播放列表名称");
System.out.println("显示所有播放列表的名称为:");
plc.displayPlayListName();
break;
default:
System.out.println("该数字没有对应的操作");
break;
}
}
break;
}
}
}
public static void main(String[] args) {
TestDemo td = new TestDemo();
while (true) {
try {
td.test();
} catch (InputMismatchException e) {
System.out.println("信息有误");
} finally {
continue;
}
}
}
}
问题描述:
这是所有的完成代码:
还是在进行case8操作的时候, 写入信息没问答, 控制台读取不出来信息, 结果如下:
*******************************
**主菜单**
1--播放列表管理
2--播放器管理
0--退出
*******************************
请输入对应的数字:
1
***************************************
**播放列表管理**
1--将歌曲添加到主播放列表
2--将歌曲添加到普通播放列表
3--通过歌曲id查询播放列表中的歌曲
4--通过歌曲名称查询播放列表中的歌曲
5--修改播放列表中的歌曲
6--删除播放列表中的歌曲
7--显示播放列表中的歌曲
8--导出歌单
9--返回上一级菜单
***************************************
请输入对应的数字:
1
将歌曲添加到主播放列表
请输入要添加歌曲的数量:
1
请输入第1首歌曲:
请输入歌曲的id:
1
请输入歌曲的名称:
1
请输入演唱者:
1
***************************************
**播放列表管理**
1--将歌曲添加到主播放列表
2--将歌曲添加到普通播放列表
3--通过歌曲id查询播放列表中的歌曲
4--通过歌曲名称查询播放列表中的歌曲
5--修改播放列表中的歌曲
6--删除播放列表中的歌曲
7--显示播放列表中的歌曲
8--导出歌单
9--返回上一级菜单
***************************************
请输入对应的数字:
8
请输入需要导出的歌单名称:
主播放列表
***************************************
**播放列表管理**
1--将歌曲添加到主播放列表
2--将歌曲添加到普通播放列表
3--通过歌曲id查询播放列表中的歌曲
4--通过歌曲名称查询播放列表中的歌曲
5--修改播放列表中的歌曲
6--删除播放列表中的歌曲
7--显示播放列表中的歌曲
8--导出歌单
9--返回上一级菜单
***************************************
请输入对应的数字:
正在回答 回答被采纳积分+1
同学你好,歌曲Song类没有序列化,建议同学实现Serializable接口。
如下:
关于序列化,同学可以回顾一下之前课程https://class.imooc.com/lesson/1441#mid=32943
祝学习愉快~
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星