老师,这是我的全部代码,请看看还有什么问题?
package com.qinyan.player;
import java.io.Serializable;
public class Song implements Serializable{
private String id;
private String name;
private String singer;
public Song(String id, String name, String singer) {
super();
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 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) {
if (this == obj)
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 com.qinyan.player;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import com.qinyan.player.Song;
public class PlayList implements Serializable{
private String playListName;
private List<Song> musicList;
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;
}
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);
}
}
public Song searchSongById(String id) {
Song song = null;
for (Song song1 : musicList) {
if (song1.getId().equals(id)) {
song = song1;
break;
}
}
return song;
}
public Song searchSongByName(String name) {
Song song = null;
for (Song song1 : musicList) {
if (song1.getName().equals(name)) {
song = song1;
break;
}
}
return song;
}
public void updateSong(String id, Song song) {
Song song1 = searchSongById(id);
if (song1 == null) {
System.out.println("没有找到id为" + id + "对应的歌曲信息!");
} else {
musicList.remove(song1);
musicList.add(song);
System.out.println("修改成功!");
}
}
public void deleteSong(String id) {
Song song = searchSongById(id);
if (song != null) {
musicList.remove(song);
System.out.println("删除成功!");
} else {
System.out.println("没有找到id为" + id + "对应的歌曲信息!");
}
}
public void displayAllSong() {
System.out.println("播放列表中的所有歌曲为:");
for (Song song1 : musicList) {
System.out.println(song1);
}
}
public void exportPlayList(){
try {
FileOutputStream fos=new FileOutputStream(playListName+"的歌单.txt");
ObjectOutputStream oos=new ObjectOutputStream(fos);
List<Song> ss=getMusicList();
for(Song s:ss){
oos.writeObject(s);
}
oos.flush();
fos.close();
oos.close();
System.out.println("导出歌单成功");
} catch (FileNotFoundException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
}
package com.qinyan.player;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import com.qinyan.player.PlayList;
public class PlayListCollection {
Map<String, PlayList> playListMap;
public PlayListCollection() {
playListMap = new HashMap<String, PlayList>();
}
public Map<String, PlayList> getPlayListMap() {
return playListMap;
}
public void setPlayListMap(Map<String, PlayList> playListMap) {
this.playListMap = playListMap;
}
public void addPlayList(PlayList playList) {
playListMap.put(playList.getPlayListName(), playList);
}
public void deletePlayList(PlayList playList) {
playListMap.remove(playList.getPlayListName());
System.out.println("删除成功!");
}
public PlayList searchPlayListByName(String playListName) {
PlayList playList = null;
Set<String> playListSet = playListMap.keySet();
for (String s : playListSet) {
if (s.equals(playListName)) {
playList = playListMap.get(s);
break;
}
}
return playList;
}
public void displayListName() {
Set<String> playListSet = playListMap.keySet();
System.out.println("播放列表名称为:");
for (String s : playListSet) {
System.out.println(s);
}
}
}
package com.qinyan.player;
import java.util.InputMismatchException;
import java.util.Scanner;
public class TestDemo {
public void testSong(){
Song song1 = new Song("s001", "两只老虎", "小太阳");
Song song2 = new Song("s002", "小燕子", "风车");
Song song3 = new Song("s003", "茉莉花", "彩虹");
Song song4 = new Song("s003", "茉莉花", "彩虹");
System.out.println(song1);
System.out.println("song1==song3?" + (song1.equals(song3)));
System.out.println("song4==song3?" + (song4.equals(song3)));
System.out.println(song3 == song4);
}
public void testPlayList(){
Song song1 = new Song("s001", "两只老虎", "小太阳");
Song song2 = new Song("s002", "小燕子", "风车");
Song song3 = new Song("s003", "茉莉花", "彩虹");
Song song4 = new Song("s003", "茉莉花", "彩虹");
PlayList mainPlayList = new PlayList("主播放列表");
mainPlayList.addToPlayList(song1);
mainPlayList.addToPlayList(song2);
mainPlayList.addToPlayList(song3);
mainPlayList.addToPlayList(song4);
mainPlayList.displayAllSong();
Song song = mainPlayList.searchSongById("s002");
if (song != null) {
System.out.println("根据id查询的歌曲信息为:");
System.out.println(song);
} else {
System.out.println("该歌曲不存在!");
}
song = null;
song = mainPlayList.searchSongByName("小燕子");
if (song != null) {
System.out.println("根据name查询的歌曲信息为:");
System.out.println(song);
} else {
System.out.println("该歌曲不存在!");
}
Song songUpdate = new Song("s005", "茉莉花", "小太阳");
mainPlayList.updateSong("s003", songUpdate);
mainPlayList.displayAllSong();
mainPlayList.deleteSong("s005");
mainPlayList.displayAllSong();
}
public void testPlayListCollection(){
Song song1 = new Song("s001", "两只老虎", "小太阳");
Song song2 = new Song("s002", "小燕子", "风车");
Song song3 = new Song("s003", "茉莉花", "彩虹");
PlayList mainPlayList = new PlayList("主播放列表");
mainPlayList.addToPlayList(song1);
mainPlayList.addToPlayList(song2);
mainPlayList.addToPlayList(song3);
PlayList favouritePalyList = new PlayList("最喜欢的歌曲");
favouritePalyList.addToPlayList(mainPlayList.getMusicList().get(0));
favouritePalyList.addToPlayList(mainPlayList.getMusicList().get(1));
favouritePalyList.displayAllSong();
PlayListCollection plc = new PlayListCollection();
plc.addPlayList(mainPlayList);
plc.addPlayList(favouritePalyList);
plc.displayListName();
PlayList playList = plc.searchPlayListByName("最喜欢的歌曲");
playList.displayAllSong();
System.out.println("删除前:");
plc.displayListName();
plc.deletePlayList(favouritePalyList);
System.out.println("删除后:");
plc.displayListName();
}
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() {
TestDemo td = new TestDemo();
Scanner sc = new Scanner(System.in);
int input = 0, input1 = 0, input2 = 0;
//创建一个播放列表容器(播放器)
PlayListCollection plc=new PlayListCollection();
//创建主播放列表
PlayList mainPlayList=new PlayList("主播放列表");
//将主播放列表添加到播放器
plc.addPlayList(mainPlayList);
PlayList favouritePlayList=null;
while (true) {
td.mainMenu();
System.out.println("请输入对应数字进行操作:");
try{
input = sc.nextInt();
}catch(InputMismatchException e){
System.out.println("输入的数据格式有误:");
sc.next();
continue;
}
if (input == 0) {
break;
}
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);
//分别将歌曲添加到普通播放列表和主播放列表
favouritePlayList.addToPlayList(song);
mainPlayList.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 strPlayListName2=sc.next();
PlayList pl1=plc.searchPlayListByName(strPlayListName2);
if(pl1==null){
System.out.println("该播放列表不存在!");break;
}else{
System.out.println("请输入要查询的歌曲名称:");
String strName1=sc.next();
Song s=pl1.searchSongByName(strName1);
if(s==null){
System.out.println("该歌曲在播放列表"+strPlayListName2+"中不存在!");
}else{
System.out.println("该歌曲的信息为:");
System.out.println(s);
}
}
break;
case 5:
System.out.println("修改播放列表中的歌曲");
System.out.println("请输入要修改歌曲所在的播放列表名称:");
String strPlayListName3=sc.next();
PlayList pl2=plc.searchPlayListByName(strPlayListName3);
if(pl2==null){
System.out.println("该播放列表不存在!");break;
}else{
System.out.println("请输入要修改的歌曲id:");
String strId=sc.next();
Song s=pl2.searchSongById(strId);
if(s==null){
System.out.println("该歌曲在播放列表"+strPlayListName3+"中不存在!");
}else{
System.out.println("开始修改歌曲的名称和演唱者:");
System.out.println("请输入歌曲名称:");
String strName=sc.next();
System.out.println("请输入演唱者:");
String strSinger=sc.next();
//创建一个Song类的对象
Song song=new Song(strId,strName,strSinger);
pl2.updateSong(strId, song);
mainPlayList.updateSong(strId, song);
}
}
break;
case 6:
System.out.println("删除播放列表中的歌曲");
System.out.println("请输入要删除的歌曲所在的播放列表名称:");
String strPlayListName4=sc.next();
PlayList pl3=plc.searchPlayListByName(strPlayListName4);
if(pl3==null){
System.out.println("该播放列表不存在!");break;
}else{
System.out.println("请输入要删除的歌曲id:");
String strId=sc.next();
Song s=pl3.searchSongById(strId);
if(s==null){
System.out.println("该歌曲在播放列表"+strPlayListName4+"中不存在!");
}else{
pl3.deleteSong(strId);
}
}
break;
case 7:
System.out.println("显示播放列表中的所有歌曲:");
System.out.println("请输入要显示歌曲的播放列表名称:");
String strPlayListName5=sc.next();
PlayList pl4=plc.searchPlayListByName(strPlayListName5);
if(pl4==null){
System.out.println("该播放列表不存在!");break;
}else{
pl4.displayAllSong();
}
break;
case 8:
System.out.println("导出歌单:");
System.out.println("请输入要导出歌单的播放列表名称:");
String strPlayListName6=sc.next();
PlayList pl5=plc.searchPlayListByName(strPlayListName6);
if(pl5==null){
System.out.println("该播放列表不存在!");break;
}else{
pl5.exportPlayList();
}
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("从播放器删除播放列表");
while (true) {
System.out.println("请输入要删除的播放列表名称:");
String strPlayListName = sc.next();
if (strPlayListName.equals("主播放列表")) {
System.out.println("主播放列表不能删除!");
continue;
}
// 查询播放列表是否存在
PlayList playList1 = plc
.searchPlayListByName(strPlayListName);
if (playList1 == null) {
System.out.println("该播放列表不存在!");
continue;
} else {
// 存在则删除
plc.deletePlayList(playList1);
break;
}
}
break;
case 3:
System.out.println("通过名字查询播放列表信息");
System.out.println("请输入要查询的播放列表名称:");
String strPlayList1=sc.next();
PlayList playList2=plc.searchPlayListByName(strPlayList1);
if(playList2==null){
System.out.println("该播放列表不存在!");
}else{
//显示该播放列表名称及其中的所有歌曲
System.out.println("该播放列表存在!");
System.out.println("该播放列表的名称为:"+strPlayList1);
playList2.displayAllSong();
}
break;
case 4:
System.out.println("显示所有播放列表名称");
plc.displayListName();
break;
default:
System.out.println("该歌曲没有对应的操作!");
break;
}
}
break;
default:
System.out.println("该歌曲没有对应的操作!");
break;
}
}
}
public static void main(String[] args) {
TestDemo td=new TestDemo();
//td.testSong();
//td.testPlayList();
//td.testPlayListCollection();
td.test();
}
}
练习题的2,3小题,我也是先查询播放列表名称的。但是,可以直接用ID来操作吗?4
收起
正在回答
1回答
同学你好,代码完成的不错,在进行修改和删除播放列表中的歌曲时,可以通过ID进行查询修改或者删除。具体思路如下:
遍历所有播放列表,查询在该播放列表中是否存在,如存在则修改
获取所有播放列表名称
定义一个变量用来判别是否有歌曲被修改
遍历集合进行查询修改,查询歌曲在该播放列表中是否存在,如存在则修改,否则对变量进行统计
在循环外进行判断变量与列表中名称的集合大小是否相等,如果不相等,则修改成功,否则修改不成功。
具体代码如下:
case 5:
System.out.println("修改播放列表中的歌曲");
System.out.println("请输入要修改的歌曲id:");
String strId=sc.next();
System.out.println("请输入修改后的歌曲名称:");
String strName=sc.next();
System.out.println("请输入修改后的演唱者:");
String strSinger=sc.next();
//创建Song类对象
Song song=new Song(strId,strName,strSinger);
//遍历所有播放列表,查询在该播放列表中是否存在,如存在则修改
Map<String, PlayList> playListSet=plc.getPlayListMap();
//获取所有播放列表名称
Set<String> setName=playListSet.keySet();
int count1=0;//用来判别是否有歌曲被修改
//遍历集合进行查询修改
for(String playListName:setName){
PlayList pl3=playListSet.get(playListName);
//查询歌曲在该播放列表中是否存在,如存在则修改,否则对count1进行统计
Song song1=pl3.searchSongById(strId);
if(song1!=null){
pl3.updateSong(strId,song);
}else{
count1++;
}
}
if(count1!=setName.size()){
System.out.println("修改成功!");
}else{
System.out.println("该歌曲在所有播放列表中均不存在!");
}
break;case 6:
System.out.println("删除播放列表中的歌曲");
System.out.println("请输入要删除的歌曲id:");
String strId1=sc.next();
//遍历所有播放列表,查询在该播放列表中是否存在,如存在则删除
Map<String, PlayList> playListSet1=plc.getPlayListMap();
//获取所有播放列表名称
Set<String> setName1=playListSet1.keySet();
int count2=0;//用来判别是否有歌曲被删除
//遍历集合进行查询删除
for(String playListName:setName1){
PlayList pl3=playListSet1.get(playListName);
//查询歌曲在该播放列表中是否存在,如存在则删除,否则对count1进行统计
Song song1=pl3.searchSongById(strId1);
if(song1!=null){
pl3.deleteSong(strId1);
}else{
count2++;
}
}
if(count2!=setName1.size()){
System.out.println("删除成功!");
}else{
System.out.println("该歌曲在所有播放列表中均不存在!");
}
break;如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星