有如下问题,望详细解答

有如下问题,望详细解答

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
 * 属性 playListMap map
 * @author RYAN
 *getter,setter方法
 *public void addPlayList(PlayList pl);添加播放列表
 *public void deletePlayList(PlayList lp);删除播放列表
 *public PlayList searchPlayListByName();通过名称查询播放列表;
 *public void displayAllPlayListName();显示所有播放列表名称;
 */
public class PlayListCollection {
private Map<String,	PlayList> playListMap;

public PlayListCollection() {
	 Map<String,PlayList> plc=new HashMap<>();
	 this.playListMap=plc;
}

//public PlayListCollection(Map<String, PlayList> playListMap) {
//	super();
//	this.playListMap = playListMap;
//}

public Map getPlayListMap() {
	return playListMap;
}

public void setPlayListMap(Map playListMap) {
	this.playListMap = playListMap;
}

//添加播放列表
public void addPlayList(PlayList pl) {
	
	 
	Scanner s=new Scanner(System.in);
	System.out.println("向播放器中添加播放列表");
	System.out.println("请输入要添加的播放列表的名称:");
	String name=s.next();
	pl.setPlayListName(name);
	
	playListMap.put(name,pl);
	System.out.println("添加播放列表成功~");
	
}
//删除播放列表
public void deletePlayList(PlayList dp) {
	System.out.println("请输入要删除的播放列表名称:");
	Scanner sc=new Scanner(System.in);
	String deName=sc.next();
	if(playListMap.containsKey(deName)) {
		playListMap.remove(deName);
		System.out.println("成功将该播放列表删除~");
	}
	else {
		System.out.println("你要删除的播放列表不存在,请先添加至播放列表~");
	}
}
//通过名称查询播放列表;
public void searchPlayListByName() {
	Scanner s =new Scanner(System.in);
	System.out.println("通过播放列表名称进行查询");
	System.out.println("请输入要查询的播放列表名称:");
	String n=s.next();
if(playListMap.containsKey(n)) {
	System.out.println("该播放列表存在~");
	System.out.println( "该播放列表的名称为"+n);
	System.out.println("播放列表的所有歌曲为:");
	for(Song song:playListMap.get(n).musicList) {
		System.out.println(song);
	}

}
		
	
else {
	System.out.println("该播放列表不存在,请先添加该播放列表~");
}
}
//显示所有播放列表名称;
public void displayAllPlayListName() {
	Iterator<PlayList> it= playListMap.values().iterator();
	while(it.hasNext()) {
	System.out.println(it.next().getPlayListName());	
	}
	
	
}
}
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

/**
 *属性有playListName(播放列表名称),musicList(播放列表的歌曲集合)
 * @author RYAN
 *构造方法,getter,setter方法
 *public void addToPlayList(Song song);将歌曲添加到播放列表
 *public void displayAllSong();显示播放列表所有歌曲;
 *public Song  searchSongById(String id);通过歌曲id查询歌曲
 *public Song searchSongByName(String name);通过歌曲名称查询歌曲;
 *public void updateSong(Song song);修改歌曲;
 *public void deleteSong(String id);删除歌曲;
 *public void exportPlayList();导出播放列表
 */
public class PlayList {
String playListName;
List<Song> musicList=new ArrayList<Song>();
public PlayList(String playListName){
	 List playList=new ArrayList();
	this.playListName = playListName;
}
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 PlayList(String playListName, List<Song> musicList) {
	super();
	this.playListName = playListName;
	this.musicList = musicList;
	
}


public PlayList() {
	super();
	// TODO Auto-generated constructor stub
}
//将歌曲添加到播放列表
public void addToPlayList(Song song) {
	
	System.out.println("将歌曲添加到主播放列表~");
	System.out.println("请输入要添加歌曲的数量:");
	Scanner sc=new Scanner(System.in);
	int n=sc.nextInt();
	for(int i=0;i<n;i++) {
		System.out.println("请输入第"+(i+1)+"首歌曲的信息");
		System.out.println("请输入歌曲的id:");
		String id=sc.next();
		song.setId(id);
		System.out.println("请输入歌曲的名称:");
		String name=sc.next();
		song.setName(name);
		System.out.println("请输入歌曲的演唱者:");
		String singer=sc.next();
		song.setSinger(singer);
		musicList.add(song);
		System.out.println("添加歌曲成功~");
		
	}
	
}
public void addToNormalPlayList(Song song) {
	PlayListCollection plc=new PlayListCollection();
	PlayList pl=new PlayList();	
	Scanner sc=new Scanner(System.in);
	System.out.println("将歌曲添加到普通放列表~");
	System.out.println("请输入要添加的播放列表名称:");
	String normalName=sc.next();
	if(plc.getPlayListMap().containsKey(normalName)) {
	System.out.println("请输入要添加歌曲的数量:");	
	int n=sc.nextInt();
	for(int i=0;i<n;i++) {
		System.out.println("请输入第"+(i+1)+"首歌曲的信息");
		System.out.println("请输入歌曲的id:");
		String id=sc.next();
		song.setId(id);
		System.out.println("请输入歌曲的名称:");
		String name=sc.next();
		song.setName(name);
		System.out.println("请输入歌曲的演唱者:");
		String singer=sc.next();
		song.setSinger(singer);
		((List<Song>) plc.getPlayListMap().get(normalName)).add(song);
		System.out.println("添加歌曲成功~");
	
	}
		}
		else {
			System.out.println("该播放列表不存在,请先将播放列表添加到播放器中~");
		}
		
		
	}
	

//显示播放列表所有歌曲;
public void displayAllSong() {
	
	for(Song s:musicList) {
		System.out.println(s);
	}
//	Iterator<Song> it= musicList.iterator() ;
//	while(it.hasNext()) {
//		
//		System.out.println(it.next());
//	}
}
//通过歌曲id查询歌曲
public Song  searchSongById(String id) {
	return null;
	
}
//通过歌曲名称查询歌曲
public Song searchSongByName(String name) {
	return null;
	
}
//修改歌曲
public void updateSong(Song song) {
	
}
//删除歌曲
public void deleteSong(String id) {
	
}
//导出播放列表
public void exportPlayList() {
	
}



  1. 在PlayListCollection 中,addPlayList方法,添加后调用显示所有播放列表,会覆盖前面添加的播放列表,全部显示最后添加的播放列表,哪里出问题了?

  2. 在添加普通不放列表中addNormalPlayList()方法中,在判断语句下,不管是否存在输入的列表,总是显示不存在,测试了一下,调用该方法后实例化的PlayListMap你面的值总是空的,什么原因?

  3. 在构造方法中实例化,是不是每次调用构造方法实例化时,都会重新赋值,先前PlayListMap里的值是不是就没了,怎样避免这种情况?

  4. 比较笨,希望能说明白,前面提了很多问题,回答的都不怎么明白,感觉不是在回答我的问题

正在回答

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

1回答

1、在PlayListCollection 中,addPlayList方法,添加后调用显示所有播放列表,会覆盖前面添加的播放列表,全部显示最后添加的播放列表,哪里出问题了?

在代码中 pl.setPlayListName(name);      playListMap.put(name,pl);每次都是修改的pl的名字,播放列表对象还是之前创建的,所以再次添加到map中的时候,因为map不允许添加重复数据,所以不会再添加一次,只是把之前播放列表的名字修改了。如果代码像你这样写,不用参数也行,在String name=s.next();语句后面创建一个新的PlayLsit的对象p1,然后再执行下面的操作就可以了。

public void addPlayList(PlayList pl) {  
    Scanner s=new Scanner(System.in);
    System.out.println("向播放器中添加播放列表");
    System.out.println("请输入要添加的播放列表的名称:");
    String name=s.next();
    pl.setPlayListName(name);      
    playListMap.put(name,pl);
    System.out.println("添加播放列表成功~");
}

2、添加普通不放列表中addNormalPlayList()方法中,在判断语句下,不管是否存在输入的列表,总是显示不存在,测试了一下,调用该方法后实例化的PlayListMap你面的值总是空的,什么原因?

在这个方法中每次PlayListCollection都是重新定义一遍,根本就不是之前的PlayListCollection对象,所以肯定找不到里面的内容。可以给方法定义一个参数,把PlayListCollection作为参数传进来,要保证操作的都是一个PlayListCollection对象才行。

3、在构造方法中实例化,是不是每次调用构造方法实例化时,都会重新赋值,先前PlayListMap里的值是不是就没了,怎样避免这种情况?

调用构造方法后,就是创建一个新的对象了,按照第二个问题中的方式改变,可以保证是同一个PlayListCollection对象即可。

祝学习愉快!


  • 慕后端3163330 提问者 #1
    非常感谢!
    2017-08-09 17:57:52
  • 我想请问一下怎么问题二的解决方法具体应该怎么实现?
    2017-10-16 22:11:57
  • 将PlayListCollection作为addNormalPlayList方法参数传递过来,也就是给addNormalPlayList方法增加一个参数,这样就可以保证每次使用的是同一个PlayListCollection;
    2017-10-17 11:23:06
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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