问下添加普通列表该怎样弄啊,还有发生了空指针异常,卡住了啊

问下添加普通列表该怎样弄啊,还有发生了空指针异常,卡住了啊

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 ;
}
  
}
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);
	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 playListMap;
public PlayListCollection(){
	this.playListMap=playListMap;
}
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();
    	playListMap.put(name, playList);
           System.out.println("播放列表添加成功!");
            
    	}
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("普通播放列表");
		List<Song> plc=new ArrayList<Song>();
		List<Song> puto=new ArrayList<Song>();
		plc.addAll(one.getMusicList());
		puto.addAll(two.getMusicList());
		PlayListCollection gg=new PlayListCollection();
		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);
				  break;
			  case 2:
				  System.out.println("将歌曲添加到普通播放列表");
				  two.addToPlayList(null);
				  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(two);
				  break;
			  case 2:
				  break;
			  case 3:
				  break;
			  case 4:
				  break;
			  case 9:
				  flag=false;
				  break;
			  }
			  break;
		}
		}
		
	}
	}
}


正在回答

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

4回答

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

这就是用你代码测试的,修改11行后,能正常运行。你改完保存代码了吗


  • 哈哈哈毛 提问者 #1
    可以了,试了几次它才没提示错误,谢谢了
    2018-08-14 19:31:34
提问者 哈哈哈毛 2018-08-14 18:36:51
好帮手慕雪 2018-08-14 18:16:41

首先这个程序可以有很多播放列表,如主播放列表,我的播放列表,XXX播放列表。然后每个播放列表中可以有很多的歌曲。所以每一个播放列表都是一个集合,例如list。每个list中有很多的Song。所以这个列表的结构就是List<Song>。全部的播放列表放在什么地方呢,又放在一个集合中,为了快速找到某播放列表的信息,所以就用Map来存储,所以最后列表的集合的结构就是PlayListCollection类中的一个Map<String,<List<Song>>>,key就是每个播放列表的名字,value就是这个播放列表的歌曲们。还有一个固定的主播放列表。主方法中的如果要将歌曲添加到主播放列表那就放在固定的主播放列表中,如果将歌曲添加到普通播放列表,那你需要先判断此列表是否存在,如果存在就添加歌曲,如果不存在则new一个新的列表,并把歌曲添加到此列表中,然后再把新的列表放在那个Map里。“播放器添加播放列表时出现空指针异常”

好帮手慕雪 2018-08-14 14:32:21

1)添加普通列表与主列表一样,只不过让用户先输入名字,再寻找此列表是否存在,不存在则新建一个,而不是都放在two中。一个主列表,多个普通列表。但不管是普通列表还是主列表都放在了PlayListCollection中。2)one和two是PlayList类对象,而PlayList类中并没有displayAllSong()方法,所以无法调用,语法就出错了。

  • 提问者 哈哈哈毛 #1
    那普通列表该怎样写,能详细点吗,还有displayAllSong()方法我没粘贴上,这里是没错的,我是在播放器添加播放列表时出现空指针异常
    2018-08-14 15:46:27
  • 好帮手慕雪 回复 提问者 哈哈哈毛 #2
    空指针异常是因为PlayListCollection类addPlayList()中的playListMap为空了,你并没有new它呀。例如在构造方法中代码改为playListMap=new HashMap();
    2018-08-14 18:18:05
  • 提问者 哈哈哈毛 回复 好帮手慕雪 #3
    这个我new了但还是异常
    2018-08-14 18:32:55
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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