修改播放列表中的歌曲

修改播放列表中的歌曲

package comm.imooc.player;

public class Song {
	
	/**
	 * 属性:歌曲id,歌曲名,演唱者
	 */
	private String id;
	private String name;
	private String singer;
	
	/**
	 * 无参构造方法
	 */
	public Song() {
		
	}
	
	/**
	 * 多参构造方法给属性赋值
	 * @param id
	 * @param name
	 * @param singer
	 */
	public Song(String id, String name, String singer) {
		this.id = id;
		this.name = name;
		this.singer = singer;
	}
	
	/**
	 * geter和setter方法
	 * @return
	 */
	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;
	}
	
	/**
	 * hashCode()和equals()方法
	 */
	@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;
	}
	
	/**
	 * 重写toString方法
	 */
	@Override
	public String toString() {
		return "歌曲信息:歌曲id:" + id + ",歌曲名:" + name + ",演唱者:" + singer;
	}
	

}
package comm.imooc.player;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class PlayList{
	Scanner sc=new Scanner(System.in);
	
	/**
	 * 属性:播放列表名称,播放列表中的歌曲集合
	 */
	private String playListName;
	List<Song> musicList=new ArrayList<Song>();
  
	/**
	 * 无参构造方法
	 */
	public PlayList() {

	}
	
	/**
	 * 多参构造方法
	 * @param playListName
	 * @param musicList
	 */
	public PlayList(String playListName, List<Song> musicList) {
		super();
		this.playListName = playListName;
		this.musicList = musicList;
	}

	/**
	 * getter和setter方法
	 * @return
	 */
	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) {
		if(!(musicList.contains(song))) {
			musicList.add(song);
		}else {
			System.out.println("该播放列表中已有该歌曲!");
		}
	}

	/**
	 * 方法13:通过id查询歌曲
	 * @param id
	 * @return
	 */
	public Song searchSongById(String id) {
		Song songg=new Song();
		for(Song song:musicList) {
			if(song.getId().equals(id)) {
				songg=song;
			}
		}
		return songg;
	}
	
	/**
	 * 方法14:通过名称查询歌曲
	 * @param name
	 * @return
	 */
	public void searchSongByName(String name) {
		for(Song song:musicList) {
			if(song.getName().equals(name)) {
				System.out.println(song);
			}
		}
	}
	
	/**
	 * 方法15:修改歌曲
	 * @param song
	 */
	public void updateSong(Song song) {
		
		System.out.println("请输入修改后的歌曲名称:");
		String name=sc.next();
		song.setName(name);
		System.out.println("请输入修改后的演唱者:");
		String singer=sc.next();
		song.setSinger(singer);
	}
	
	/**
	 * 方法16:从播放列表删除歌曲
	 * @param id
	 */
	public void deleteSong(String id) {
		
	}
	
	/**
	 * 方法17:显示播放列表中所有歌曲
	 */
	public void disaplayAllSong() {
		System.out.println("播放列表中的所有歌曲为:");
		for(int i=0;i<musicList.size();i++) {
			System.out.println(musicList.get(i));//!!!
		}
	}
	
	/**
	 * 方法18:导出歌单
	 */
	public void exportPlayList() {
		
	}
	/**
	 * 重写toString方法
	 */

	@Override
	public String toString() {
		return playListName;
	}
	
}
package comm.imooc.player;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Scanner;

public class PlayListCollection {
	Scanner sc=new Scanner(System.in);
	
	/**
	 * 定义存放播放列表的集合(playListMap)
	 */
    Map<String,PlayList> playListMap;
    
    /**
     * 无参构造方法
     */
    public PlayListCollection() {
    	
    }
    
    /**
     * 多参构造方法
     * @param playListMap
     */
    public PlayListCollection(Map<String, PlayList> playListMap) {
		super();
		this.playListMap = playListMap;
	}
    
	/**
	 * getter和setter方法
	 * @return
	 */
    public Map<String, PlayList> getPlayListMap() {
		return playListMap;
	}

	public void setPlayListMap(Map<String, PlayList> playListMap) {
		this.playListMap = playListMap;
	}
	
	/**
	 * 方法21:添加播放列表
	 * @param playlist
	 */
	public void addPlayList(PlayList playlist) {
		System.out.println("向播放器添加播放列表");
		System.out.println("输入要添加的播放列表名称:");
		String playlistname=sc.next();
		playListMap.put(playlistname, new PlayList(playlistname,new ArrayList<Song>()));
	}	
	
	/**
	 * 方法22:删除播放列表
	 * @param playList
	 */
	public void deletePlayList(PlayList playList) {
		System.out.println("请输入要删除的播放列表名称:");
		String playlistname=sc.next();
		if(playListMap.containsKey(playlistname)) {
			playListMap.remove(playlistname, playList);
			System.out.println("删除成功!");
		}else {
			System.out.println("播放器中没有该播放列表!");
		}	
	}
	/**
	 * 方法23:通过名字查询
	 * @param playListName
	 * @return
	 */
	public PlayList searchListByName(String playListName) {
		System.out.println("请输入要查询的播放列表名称:");
		String playlistname=sc.next();
		if(playListMap.containsKey(playlistname)) {
			System.out.println("该播放列表存在!");
			System.out.println("该播放列表的名称为:"+playlistname);
			System.out.println("该播放列表中所有的歌曲为:");
		}
		return null;
	}
	
	/**
	 * 方法24:显示所有播放列表名称
	 */
	public void disaplayPlayListName() {
		Iterator<PlayList> it=playListMap.values().iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}
}
package comm.imooc.player;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
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("******************************");
		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("          9--返回上一层菜单");
		System.out.println("****************************************");
		System.out.println("请输入对应数字对播放器进行管理:");
    }
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		Song song=new Song();//歌曲类对象
		PlayList pl=new PlayList();//播放列表类对象
		Map<String,PlayList> playListMap=new HashMap<String,PlayList>();//播放器类对象参数(播放器集合)
		PlayListCollection plc=new PlayListCollection(playListMap);//播放器类对象
		TestDemo test=new TestDemo();//测试类对象
		PlayList playlist1=new PlayList("主播放列表",new ArrayList<Song>());//定义主播放列表实例对象
		plc.playListMap.put("主播放列表", playlist1);//添加主播放列表实例对象

		boolean b=true;
		while(b) {		
			test.mainMenu();
			int n=sc.nextInt();
			Song song1;
			switch(n) {
			case 1:test.playListMenu();
				while(b) {
					int m=sc.nextInt();
					switch(m) {
					case 1:   
						System.out.println("将歌曲添加到主播放列表");
						System.out.println("请输入要添加的歌曲数量:");
						int k=sc.nextInt();
						for(int i=0;i<k;i++) {
							System.out.println("请输入第"+(i+1)+"首歌曲:");
							System.out.println("请输入歌曲的id:");
							String id=sc.next();
							System.out.println("请输入歌曲的名称:");
							String name=sc.next();
							System.out.println("请输入歌曲的演唱者:");
							String singer=sc.next();
							song1=new Song(id,name,singer);
							playlist1.addToPlayList(song1);
						}		
					    break;
					case 2:
						System.out.println("将歌曲添加到普通播放列表");
					    System.out.println("请输入要添加的播放列表名称:");
					    String playlistname=sc.next(); 
						if(!(plc.getPlayListMap().containsKey(playlistname))) {
							System.out.println("该播放列表不存在,请先将播放列表添加到播放器中");
						}else if(playlistname.equals(plc.playListMap.get(playlistname).getPlayListName())){
							System.out.println("请输入要添加的歌曲数量:");
							int j=sc.nextInt();
							for(int i=0;i<j;i++) {
								System.out.println("请输入第"+(i+1)+"首歌曲:");
								System.out.println("请输入歌曲的id:");
								String id=sc.next();
								boolean bl=true;
								if(true) {
									for(int a=0;a<playlist1.musicList.size();a++) {
										if(id.equals(playlist1.musicList.get(a).getId())) {	   
											plc.playListMap.get(playlistname).addToPlayList(playlist1.musicList.get(a));
											bl=false;
											break;
									    }	
									}
								}	
								if(bl==false) {
									bl=true;
									continue;
								}else {
									bl=true;
								}
								System.out.println("该歌曲在主播放列表不存在,继续输入歌曲其他信息!");
								System.out.println("请输入歌曲的名称:");
								String name=sc.next();
								System.out.println("请输入歌曲的演唱者:");
								String singer=sc.next();
								Song song2=new Song(id,name,singer);
								plc.playListMap.get(playlistname).addToPlayList(song2);
								playlist1.addToPlayList(song2);
							
						}
						System.out.println("主播放列表:");
						System.out.println("播放列表中的所有歌曲为:");
						for(int i=0;i<playlist1.musicList.size();i++) {
							System.out.println(playlist1.musicList.get(i));
						}
						System.out.println("普通播放列表:");
						System.out.println("播放列表中的所有歌曲为:");
						for(int i=0;i<plc.playListMap.get(playlistname).musicList.size();i++) {
							System.out.println(plc.playListMap.get(playlistname).musicList.get(i));
						 }
						}
						break;

					case 3:
						System.out.println("通过歌曲id查询播放列表中的歌曲");
						System.out.println("请输入要查询的播放列表名称:");
						String playlistname2=sc.next();
						if(playlistname2.equals(plc.playListMap.get(playlistname2).getPlayListName())) {
							System.out.println("请输入要查询歌曲id:");
							String id=sc.next(); 
							boolean bl=false;
								for(int a=0;a<plc.playListMap.get(playlistname2).musicList.size();a++) {
									String idd=plc.playListMap.get(playlistname2).musicList.get(a).getId();
									if(id.equals(idd)) {	   
										System.out.println(plc.playListMap.get(playlistname2).searchSongById(idd));
										bl=true;
										break;
								    }
								}
								if(!bl) {
									System.out.println("该歌曲在播放列表"+plc.playListMap.get(playlistname2).getPlayListName()+"中不存在!");
								}	
						}break;
					case 4:
						System.out.println("通过歌曲名称查询播放列表中的歌曲");
						System.out.println("请输入要查询的播放列表名称:");
						String playlistname3=sc.next();
						if(playlistname3.equals(plc.playListMap.get(playlistname3).getPlayListName())) {
							System.out.println("请输入要查询歌曲名称:");
							String songname=sc.next(); 
							boolean bl=false;
								for(int a=0;a<plc.playListMap.get(playlistname3).musicList.size();a++) {
									String songName=plc.playListMap.get(playlistname3).musicList.get(a).getName();
									if(songname.equals(songName)) {	   
										plc.playListMap.get(playlistname3).searchSongByName(songName);	
										bl=true;
										break;
								    }
								}
								if(!bl) {
									System.out.println("该歌曲在播放列表"+plc.playListMap.get(playlistname3).getPlayListName()+"中不存在!");
								}	
						}break;
					case 5:
						System.out.println("修改播放列表中的歌曲");
						System.out.println("请输入要修改的歌曲id:");
						String id=sc.next();
						pl.updateSong(pl.searchSongById(id));
						break;
					case 6:pl.deleteSong(song.getId()); 
						break;
					case 7:
						System.out.println("显示所有播放列表中所有歌曲");
					    System.out.println("请输入要显示的播放列表名称:");
					    String plname=sc.next();
					    if(!(plc.getPlayListMap().containsKey(plname))) {
					    	System.out.println("该播放列表不存在!");
					    }else if(plname.equals(plc.playListMap.get(plname).getPlayListName())) {
					    		plc.playListMap.get(plname).disaplayAllSong();	
					    }
						break;
					case 8:pl.exportPlayList();
						break;
					}
					if(m==9) {
					  break;
					}
					test.playListMenu();
				}break;
			case 2:test.playerMenu();
				while(b) {
					int m=sc.nextInt();
					switch(m) {
					case 1:plc.addPlayList(pl);
					    break;
					case 2:plc.deletePlayList(pl);
					    break;
					case 3:plc.searchListByName(pl.getPlayListName());
					    break;
					case 4:plc.disaplayPlayListName();
					    break;
					}
					if(m==9) {
						break;
					}
					test.playerMenu();
				}break;
			case 0:
				System.out.println("退出!");
				b=false;
				break;
			}
		}

	}

}

修改歌曲信息后,歌曲信息依然没有变。检查了下代码,觉得问题出在主方法中不应该用对象pl去调用方法,但不知道用哪个来代替pl,表示所有listMap中的所有list对象

正在回答 回答被采纳积分+1

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

2回答
无风三尺浪 2018-03-28 22:20:24

有句话当讲不当讲,为什么不把功能都封装到方法里。感觉你的功能都是靠在主方法里实现的。没有按照面向对象(Java的核心)去编程。

提问者 qq_林二爷_0 2018-02-16 17:42:07

我把pl换成playlist1(主播放列表对象)了,然后运行出来了,但恕我不理解的是为什么改了主播放列表里面的信息后,普通列表里面的也会随之更改

  • THappy #1
    你好,修改播放列表中歌曲信息需要先选择要修改的播放列表,然后通过此播放列表对象来调用修改歌曲的方法进行后续修改。 修改播放列表中的歌曲时,建议使用以下思路:如果歌曲存在此列表中,可以将原歌曲从列表中移除,然后根据修改后的歌曲信息创建一个新的歌曲对象并添加到此列表中。祝学习愉快~
    2018-02-17 21:13:08
  • 记不记得视频里添加不存在的歌曲到普通播放列表里主播放列表也要进行添加,这样就造成了在主播放列表中和其他播放列表中的该歌曲对象的引用是指向同一个内存地值得,这样一来,如果取出这个song对象并修改,其他地方也就随之更改了。
    2019-01-03 19:31:58
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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