老师,这是我的全部代码,请看看还有什么问题?

老师,这是我的全部代码,请看看还有什么问题?

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来操作吗?


正在回答

登陆购买课程后可参与讨论,去登陆

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
    可以这里不用考虑主播放列表的问题吗?修改了普通播放列表中的歌曲,不会影响到主播放列表中的歌曲吗?那如果修改的是主播放列表的歌曲,不会影响到普通播放列表吗?
    2019-09-05 15:40:44
  • 好帮手慕酷酷 回复 提问者 岩爵 #2
    同学你好,建议考虑主播放列表,如果不考虑主播放类表,则主播放列表中的歌曲会与普通列表中的歌曲不一致,这样修改了普通播放列表中的歌曲,就不会进行修改主播放类表的内容,同理,如果修改的是主播放列表的歌曲,就不会影响到普通播放列表。建议同学按照上述老师的方式进行,修改代码~如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2019-09-05 17:53:39
  • 岩爵 提问者 回复 好帮手慕酷酷 #3
    是不是只要在 pl3.updateSong(strId,song);后面加一句mainPlayList.updateSong(strId,song);就可以了?删除也是同理?
    2019-09-05 18:01:04
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师