请教老师关于普通列表集合问题

请教老师关于普通列表集合问题

我在创建普通列表时先判断此列表是否存在,如果存在就添加歌曲,没的话就新建了一个,再放进map里面,但是弄完后怎样才能把歌单放进普通列表的一个新建列表中呢,添加完歌单后不显示而主播放列表歌单显示了,请老师看下代码。

public class PlayList {//播放列表类
private String playListName;//播放列表名称
private List<Song> musicList;//播放列表中的歌曲集合
PlayListCollection oo=new PlayListCollection();
public PlayList(String playListName,List<Song> musicList){
	musicList= new ArrayList<Song>();
	this.playListName=playListName;
	this.musicList=musicList;
}
public String getPlayListName() {
	return playListName;
}
public void setPlayListName(String playListName) {
	this.playListName = playListName;
}
public List getMusicList() {
	return musicList;
}
public void setMusicList(List musicList) {
	this.musicList = musicList;
}
public void addToPlayList(Song song){//将歌曲添加到播放列表
	Scanner aa=new Scanner(System.in);
	System.out.println("请输入要的歌曲的数量:");
	int songNum=aa.nextInt();
	for(int n=0;n<songNum;n++){
	System.out.println("请输入第"+(n+1)+"首歌曲:");
	System.out.println("请输入歌曲的id:");
	String id=aa.next();
	System.out.println("请输入歌曲的名称:");
	String name=aa.next();
	System.out.println("请输入演唱者:");
	String singer=aa.next();
	song=new Song(id, name, singer);
	musicList.add(song);	
	}
}
public Song searchSongById(String id){//通过id查询歌曲
	Scanner aa=new Scanner(System.in);
	System.out.println("请输入要查询播放列表名称:");
	System.out.println("请输入要查询的歌曲id:");
	String ID=aa.next();
	for(Song song:musicList){
	if(song.getId().equals(ID)){
		System.out.println(song);	
		}		
	}
	return null;
	
}
public class PlayListCollection {//播放器类
private Map<String,PlayList> playListMap;
public PlayListCollection(){
    this.playListMap=playListMap;
	playListMap=new HashMap<String, PlayList>();
}
public Map getPlayListMap() {
	return playListMap;
}
public void setPlayListMap(Map playListMap) {
	this.playListMap = playListMap;
}
public void addPlayList(PlayList playList){//添加播放列表
    Scanner sc = new Scanner(System.in);
    System.out.println("输入要添加播放列表的名称:");
    String name = sc.next();
   if(playListMap.containsKey(name)==true){
    	System.out.println("该播放列表已存在");
    }else{
    	List<Song> newList=new ArrayList<Song>();
    	playList=new PlayList(name,newList);
    	newList.add(null);
    	playListMap.put(name,playList);
    	
    	 System.out.println("播放列表添加成功!"); 
    }          
    	}
public void deletePlayList(PlayList playList){//删除播放列表
	
}
public PlayList searchPlayListByName(String playListName){//通过名字查询
	return null;
	
}
public void displayPlayListName(){//显示所以播放列表名称
	Iterator<PlayList> it=playListMap.values().iterator();
	while(it.hasNext()){
		System.out.println(it.next());		
	}
}
}
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 static void main(String[] args) {
		PlayList one=new PlayList("主播放列表", null);
		PlayList two=new PlayList(null, null);
		List<Song> plc=new ArrayList<Song>();
		List<Song> puto=new ArrayList<Song>();
		//plc.addAll(one.getMusicList());
		PlayListCollection gg=new PlayListCollection();
		(gg.getPlayListMap()).put("主播放列表", one);
		int n=0;
		boolean flag=false;
		TestDemo aa=new TestDemo();
		while(flag==false){
		aa.mainMenu();
		Scanner hh=new Scanner(System.in);
		System.out.println("请输入对应数字进行操作:");
		n=hh.nextInt();
		flag=true;
		if(n<0||n>3){	  
			System.out.println("输入错误,请重新输入");
			flag=false;
			continue;
		}else if(n==0){
			System.out.println("***已退出程序***");
			break;
			}
		while(flag==true){
		switch(n){
		  case 1:
			  aa.playListMenu();
			  System.out.println("请输入对应数字对播放列表进行管理:");
			  int i=hh.nextInt();
			  switch(i){
			  case 1:
				  System.out.println("将歌曲添加到主播放列表");
				  one.addToPlayList(null);
				  System.out.println("主播放列表:");
				  one.displayAllSong();
				  System.out.println("普通播放列表:");
				  two.displayAllSong();
				  break;
			  case 2:
				  System.out.println("将歌曲添加到普通播放列表");
				  System.out.println("请输入要添加的播放列表名称");
				  String a=hh.next();
				  if((gg.getPlayListMap()).containsKey(a)==true){
					  two.addToPlayList(null);
					  break;
				  }else{
					  System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");					  
				  }			  
				  System.out.println("主播放列表:");
				  one.displayAllSong();
				  System.out.println("普通播放列表:");
				  two.displayAllSong();
				  break;
			  case 3:
				  one.searchSongById(null);
				  break;
			  case 4:
				  break;
			  case 5:
				  break;
			  case 6:
				  break;
			  case 7:
				  System.out.println("显示播放列表中的所有歌曲");
				  System.out.println("请输入要显示的播放列表名称:");
				  String b=hh.next();
				  if(b.equals(one.getPlayListName())){
					  one.displayAllSong();
					  break;
				  }
				  if(b.equals(two.getPlayListName())){
					  two.displayAllSong();
				  }
				  else{
					 System.out.println("没有该播放列表,请重新输入!");
				  }
				  break;
			  case 8:
				  break;
			  case 9:
				  flag=false;
				  break;
			  }
			  break;
		  case 2:			  
			  aa.playerMenu();
			  System.out.println("请输入对应数字对播放器进行管理:");
			  int t=hh.nextInt();
			  switch(t){
			  case 1:
			gg.addPlayList(null);
				  break;
			  case 2:
				  break;
			  case 3:
				  break;
			  case 4:
				gg.displayPlayListName();
				  break;
			  case 9:
				  flag=false;
				  break;
			  }
			  break;
		}
		}
		
	}
	}
}


正在回答

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

4回答

你的two普通播放列表内容是空的,参照如下修改

public static void main(String[] args) {
    PlayList one = new PlayList("主播放列表");
    PlayList two = new PlayList(null);
    PlayListCollection plCollection = new PlayListCollection();
    ……
    case 2:
    System.out.println("将歌曲添加到普通播放列表");
    System.out.println("请输入要添加的播放列表名称");
    String a = hh.next();
    two=plCollection.searchPlayListByName(a);
    if ((gg.getPlayListMap()).containsKey(a) == true) {
    //id和演唱者需要接收输入传进去,并且需要判断该id的歌曲是否在主播放列表存在
    two.addToPlayList(new Song("id",a,"演唱者"));
    break;
} else {
    System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
}
……
PlayListCollection类:
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;
}


提问者 哈哈哈毛 2018-08-15 17:38:58
public class PlayList {//播放列表类
private String playListName;//播放列表名称
private List<Song> musicList;//播放列表中的歌曲集合

public PlayList(String playListName){
	musicList= new ArrayList<Song>();
	this.playListName=playListName;
	this.musicList=musicList;
}
public String getPlayListName() {
	return playListName;
}
public void setPlayListName(String playListName) {
	this.playListName = playListName;
}
public List getMusicList() {
	return musicList;
}
public void setMusicList(List musicList) {
	this.musicList = musicList;
}
public void addToPlayList(Song song){//将歌曲添加到播放列表
	Scanner aa=new Scanner(System.in);
	System.out.println("请输入要的歌曲的数量:");
	int songNum=aa.nextInt();
	for(int n=0;n<songNum;n++){
	System.out.println("请输入第"+(n+1)+"首歌曲:");
	System.out.println("请输入歌曲的id:");
	String id=aa.next();
	System.out.println("请输入歌曲的名称:");
	String name=aa.next();
	System.out.println("请输入演唱者:");
	String singer=aa.next();
	song=new Song(id, name, singer);
	for(int i=0;i<musicList.size();i++){
		if(song.getId().equals(musicList.get(i).getId())){
			System.out.println("该歌曲已经存在!");
			return;
		}	
	}	
	musicList.add(song);
	}
}
public Song searchSongById(String id){//通过id查询歌曲
	Scanner aa=new Scanner(System.in);
	System.out.println("请输入要查询播放列表名称:");
	System.out.println("请输入要查询的歌曲id:");
	String ID=aa.next();
	for(Song song:musicList){
	if(song.getId().equals(ID)){
		System.out.println(song);	
		}		
	}
	return null;
	
}
public Song searchSongByName(String n){//通过名称查询歌曲 
	return null;
	
}
public void updateSong(Song song){//修改歌曲
	
}
public void deleteSong(String id){//从播放列表删除歌曲
	
}
public void displayAllSong(){//显示播放列表中所有的歌曲
	for(int n=0;n<musicList.size();n++){
		System.out.println(musicList.get(n));
	}
	
}
public void exportPlayList(){//导出歌单
	
}
}
public class PlayListCollection {//播放器类
private Map<String,PlayList> playListMap;
public PlayListCollection(){
    this.playListMap=playListMap;
	playListMap=new HashMap<String, PlayList>();
}
public Map getPlayListMap() {
	return playListMap;
}
public void setPlayListMap(Map playListMap) {
	this.playListMap = playListMap;
}
public void addPlayList(PlayList playList){//添加播放列表
    Scanner sc = new Scanner(System.in);
    System.out.println("输入要添加播放列表的名称:");
    String name = sc.next();
   if(playListMap.containsKey(name)==true){
    	System.out.println("该播放列表已存在");
    }else{
    	List<Song> newList=new ArrayList<Song>();//添加新的普通列表
    	playList=new PlayList(name);
    	newList.add(null);
    	playListMap.put(name,playList);
    	
    	 System.out.println("播放列表添加成功!"); 
    }          
    	}
public void deletePlayList(PlayList playList){//删除播放列表
	
}
public PlayList searchPlayListByName(String playListName){//通过名字查询
	return null;
	
}
public void displayPlayListName(){//显示所以播放列表名称
	Set<Entry<String,PlayList>> entrySet=playListMap.entrySet();
	for(Entry<String,PlayList> entry:entrySet){
		System.out.println(entry.getKey());
	}
}
}
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 static void main(String[] args) {
		PlayList one=new PlayList("主播放列表");
		PlayList two=new PlayList(null);

		List<Song> plc=new ArrayList<Song>();
		List<Song> puto=new ArrayList<Song>();
		//plc.addAll(one.getMusicList());
		PlayListCollection gg=new PlayListCollection();
		(gg.getPlayListMap()).put("主播放列表", one);
		int n=0;
		boolean flag=false;
		TestDemo aa=new TestDemo();
		while(flag==false){
		aa.mainMenu();
		Scanner hh=new Scanner(System.in);
		System.out.println("请输入对应数字进行操作:");
		n=hh.nextInt();
		flag=true;
		if(n<0||n>3){	  
			System.out.println("输入错误,请重新输入");
			flag=false;
			continue;
		}else if(n==0){
			System.out.println("***已退出程序***");
			break;
			}
		while(flag==true){
		switch(n){
		  case 1:
			  aa.playListMenu();
			  System.out.println("请输入对应数字对播放列表进行管理:");
			  int i=hh.nextInt();
			  switch(i){
			  case 1:
				  System.out.println("将歌曲添加到主播放列表");
				  one.addToPlayList(null);
				  System.out.println("主播放列表:");
				  one.displayAllSong();
				  System.out.println("普通播放列表:");
				  two.displayAllSong();
				  break;
			  case 2:
				  System.out.println("将歌曲添加到普通播放列表");
				  System.out.println("请输入要添加的播放列表名称");
				  String a=hh.next();
				  if((gg.getPlayListMap()).containsKey(a)==true){
					  two.addToPlayList(null);
					  break;
				  }else{
					  System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");					  
				  }			  
				  System.out.println("主播放列表:");
				  one.displayAllSong();
				  System.out.println("普通播放列表:");
				  two.displayAllSong();
				  break;
			  case 3:
				  one.searchSongById(null);
				  break;
			  case 4:
				  break;
			  case 5:
				  break;
			  case 6:
				  break;
			  case 7:
				  System.out.println("显示播放列表中的所有歌曲");
				  System.out.println("请输入要显示的播放列表名称:");
				  String b=hh.next();
				  if(b.equals(one.getPlayListName())){
					  one.displayAllSong();
					  break;
				  }
				  if(b.equals(two.getPlayListName())){
					  two.displayAllSong();
				  }
				  else{
					 System.out.println("没有该播放列表,请重新输入!");
				  }
				  break;
			  case 8:
				  break;
			  case 9:
				  flag=false;
				  break;
			  }
			  break;
		  case 2:			  
			  aa.playerMenu();
			  System.out.println("请输入对应数字对播放器进行管理:");
			  int t=hh.nextInt();
			  switch(t){
			  case 1:
			gg.addPlayList(null);
				  break;
			  case 2:
				  break;
			  case 3:
				  break;
			  case 4:
				gg.displayPlayListName();
				  break;
			  case 9:
				  flag=false;
				  break;
			  }
			  break;
		}
		}
		
	}
	}
}


提问者 哈哈哈毛 2018-08-15 16:47:15
public class 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() {//getter和setter方法
	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) {
	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;
}
@Override
public String toString() {
	return "歌曲信息 :id为" + id + ", 歌曲名称为:" + name + ", 演唱者为:" + singer ;
}
  
}


irista23 2018-08-15 10:16:29

上述代码做如下调整:

1、PlayList类

1)去掉PlayListCollection oo=new PlayListCollection();无用代码

2)addToPlayList(Song song)方法里要先遍历播放列表的歌曲集合List<Song>,判断播放列表中的歌曲是否存在,如果不存在再进行add(song)添加操作。在测试类中直接PlayList mainPlayList = new PlayList("主播放列表");创建主播放列表,再创建Song对象,主方法中添加就是调用addToPlayList(song)方法。

3)下图参数id没有用上,equals比较的应该是传入的id,输入放到测试类中,并且返回找到的Song对象,找不到返回null。

http://img1.sycdn.imooc.com//climg/5b7389d5000152af04310179.jpg

2、PlayListCollection类

1)addPlayList(PlayList playList)方法中,map的key不能重复,所以这里只需要一行代码

http://img1.sycdn.imooc.com//climg/5b738c7e0001967502710032.jpg

注意name可以直接通过playList.getPlayListName()代替

2)displayPlayListName()方法遍历显示的PlayList对象,需要显示Set<String> 播放列表名称。

  • 提问者 哈哈哈毛 #1
    那普通列表该做怎样的处理,我普通列表自动创建可以了,但是怎样才能将歌单信息存储到新建的普通列表里面?
    2018-08-15 11:46:55
  • irista23 回复 提问者 哈哈哈毛 #2
    歌曲添加到普通播放列表还是主播放列表调用的都是PlayList类的addToPlayList(song),只是对象不同,一个是创建的主播放列表对象,一个普通播放列表对象,普通列表添加的时候,先通过播放列表的名称查询播放列表,如果不存在提示用户先将播放列表添加到播放器中,如果存在输入歌曲信息,再执行歌曲信息检查添加操作。
    2018-08-15 13:48:31
  • 提问者 哈哈哈毛 回复 irista23 #3
    我新增普通列表后,添加sanncer键盘输入歌单信息储存不进去这个新增列表里面啊
    2018-08-15 15:47:09
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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