怎么写啊,添加歌曲到主播放列表会报空指针

怎么写啊,添加歌曲到主播放列表会报空指针

case 1:
				System.out.println("将歌曲添加到主播放列表\n请输入要添加的歌曲的数量:");
				n = in.nextInt();
				for (int i = 0; i < n; i++) {
					System.out.println("请输入第" + (i + 1) + "首歌曲\n请输入歌曲id:");
					String songId = in.next();//输入歌曲的id
					System.out.println("请输入歌曲的名称:");
					String songName = in.next();//输入歌曲的名字
					System.out.println("请输入演唱者:");
					String singerName = in.next();//输入歌手的名字
					Song songInfo = new Song("songId", "songName", "singerName");//为歌曲信息赋值
					playList.addToPlayList(songInfo);
					Set<String> keySet = map.keySet();
					//遍历keySet
					for(String key:keySet) {
						//找到主播放列表
						if("主播放列表".equals(key)) {
							map.put(key,playList);
							playListCollection.setPlayListMap(map);//播放列表存储歌曲信息
							break;//添加完毕则跳出循环
						}
						
				}
	//将歌曲添加到播放列表
	public void addToPlayList(Song song) {
		if(musicList.contains(song)) {
			System.out.println("该歌曲已存在主播放列表,请勿重复操作!");
		} else {
			musicList.add(song);
		}
	}


正在回答

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

3回答

如果是报空指针可以下断点跟一下程序看是哪个地方报的,特别是使用musicList、playList的时候,确定在之前例如musicList = new ArrayList<Song>();被正确创建了。除此之外,代码还有一个地方 

Song songInfo = new Song("songId", "songName", "singerName");//为歌曲信息赋值

这里并没有将输入的歌曲信息添加到songInfo对象中,检查一下。

  • 荒小北158 提问者 #1
    就是这里报了空指针 为什么没有添加进去啊...
    2017-09-12 23:04:43
  • irista23 回复 提问者 荒小北158 #2
    检查一下主播放列表是否正确被创建了,例如: PlayList playList=new PlayList("主播放列表");
    2017-09-13 09:36:20
  • 荒小北158 提问者 回复 irista23 #3
    除了这个原因呢 因为我通过播放器的显示所有播放列表方法 输出结果是主播放列表在map里面
    2017-09-13 14:40:13
提问者 荒小北158 2017-09-13 20:01:26
package com.imooc.play;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;



public class PlayListCollection {
		private Map<String,PlayList> playListMap = new HashMap<String,PlayList>();
		
		//无参构造方法
		public PlayListCollection() {
			
		}
		//带参构造方法
		public PlayListCollection(Map<String, PlayList> playListMap) {
			super();
			this.playListMap = playListMap;
		}

		//setter/getter
		public Map<String, PlayList> getPlayListMap() {
			return playListMap;
		}

		public void setPlayListMap(Map<String, PlayList> playListMap) {
			this.playListMap = playListMap;
		}
		
		//添加播放列表
		public void addPlayList(PlayList playList) {
			boolean flag = true;
			//取得keySet
			Set<String> keySet = playListMap.keySet();
			//遍历keySet
			for(String key:keySet) {
				//遍历中如果找到map中的key值与我们添加的播放列表名相同则无法添加
				if((playList.getPlayListName()).equals(key)) {
					System.out.println("该播放列表存在!\n该播放列表的名称为:"+key);
					flag = false;
					break;
				}
			}
			if(flag) {
				playListMap.put(playList.getPlayListName(), null);
			} 
		}
		//删除播放列表
		public void deletePlayList(PlayList playList) {
			
		}
		//通过名字查询
		public PlayList searchPlayListByName(String playListName) {
			boolean flag = true;
			//取得keySet
			Set<String> keySet = playListMap.keySet();
			//遍历keySet
			for(String key:keySet) {
				//如果要查询的列表名字与某个key相同  则输出该列表的相关信息
				if(playListName.equals(key)) {
					System.out.println("该播放列表存在!\n该播放列表的名称为:"+key+
							"\n播放列表中的所有歌曲为:"+((Song)(playListMap.get(key).getMusicList())).toString());
					flag = false;
					break;
				}
				if(flag) {
					System.out.println("该播放列表不存在!");
				}
				
			}
		   return null;	
		}
		//显示所有播放列表名称
		public void displayPlayListName() {
			//通过keySet来输出playListMap中所有的key(播放列表名称)
			Set<String> keySet = playListMap.keySet();
			System.out.println("显示所有的播放列表名称:"+"\n播放列表的名称:");
			for(String key:keySet) {
				System.out.println(key);
			}
		}
		
}
package com.imooc.play;

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

public class PlayList {
	private String playListName;//播放列表的名称
	private List<Song> musicList = new ArrayList<Song>();//储存歌曲信息的List集合
	//无参构造方法
	public PlayList() {
		
	}
	
	//带参构造方法
	public PlayList(String playListName, List musicList) {
		super();
		this.playListName = playListName;
		this.musicList = musicList;
	}
	
	//getter/setter
	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) {
		musicList.add(song);
	}
	
	//通过id查询歌曲
	public Song searchSongById(String id) {
		int n = 0;
		boolean flag = false;
		for(int i = 0; i < musicList.size(); i++) {
			
			if (((Song)(musicList.get(i))).getId() == id) {
				flag = true;
				n = i;
				break;
			} 
		}
		if(flag) {
			System.out.println(musicList.get(n));
				return null;
			} else{
				System.out.println("没有找到该歌曲!");
				return null;
			}
	}
	//通过名称查询歌曲
	public Song searchSongByName(String n) {
		int k = 0;
		boolean flag = false;
		for(int i = 0; i < musicList.size(); i++) {
			
			if (((Song)(musicList.get(i))).getName() == n) {
				flag = true;
				k = i;
				break;
			} 
		}
		if(flag) {
			System.out.println(musicList.get(k));
				return null;
			} else{
				System.out.println("没有找到该歌曲!");
				return null;
			}
	}
	//修改歌曲
	public void updateSong(Song song) {
		
	}
	//从播放列表中删除歌曲
	public void deleteSong(String id) {
		boolean flag = false;
		int n = 0;
		for (int i = 0; i < musicList.size(); i++) {
			if (id.equals(((Song) musicList.get(i)).getId())) {
				flag = true;
				n = i;
			}
		}
		if (flag) {
			musicList.remove(n);
		} else {
			System.out.println("您要删除的歌曲不在播放列表中!");
		}
	}
	//显示播放列表中的所有歌曲
	public void exportPlayList() {
		for(int i = 0; i < musicList.size(); i++) {
			System.out.println(musicList.get(i));
		}
	}
}
package com.imooc.play;

public class Song {
	private String id;//歌曲的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;
	}
	//getter/setter
	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;
	}
	//重写toString()
	@Override
	public String toString() {
		return "[歌曲id:" + id + ", 歌曲:" + name + ", 演唱者:" + 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;
	}
}


提问者 荒小北158 2017-09-13 20:00:04
package com.imooc.test;

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

import com.imooc.play.PlayList;
import com.imooc.play.PlayListCollection;
import com.imooc.play.Song;

public class TestDemo {
	//主菜单列表
	public static 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 static void playListMenu() {
			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 static void playListCollectionMenu() {
			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) {
		//创建一个播放列表的实例
		PlayList playList = new PlayList("主播放列表",null);
		int n = -1;
		//创建一个hashMap用于存储列表信息 作为传入给playListCollection的媒介
		HashMap<String,PlayList> map = new HashMap<String,PlayList>();
		map.put("主播放列表", null);
		//创建一个播放器的实例
		PlayListCollection playListCollection = new PlayListCollection(map);//将map传入,也就是将主播放列表作为key值传入
		while( n!=0 ) {//用于控制退出程序
		mainMenu();//调用菜单列表方法
		Scanner in = new Scanner(System.in);
		 n = in.nextInt();//输入对应列表数字
		switch(n) {
		case 1:
			while(n!=9) {//while循环用于控制返回上一级菜单
			playListMenu();//播放列表菜单
			n = in.nextInt();//输入对应列表数字
			switch(n) {
			/*
			 * 将歌曲添加到主播放列表
			 */
			case 1:
				System.out.println("将歌曲添加到主播放列表\n请输入要添加的歌曲的数量:");
				n = in.nextInt();
				for (int i = 0; i < n; i++) {
					System.out.println("请输入第" + (i + 1) + "首歌曲\n请输入歌曲id:");
					String songId = in.next();//输入歌曲的id
					System.out.println("请输入歌曲的名称:");
					String songName = in.next();//输入歌曲的名字
					System.out.println("请输入演唱者:");
					String singerName = in.next();//输入歌手的名字
					Song songInfo = new Song("songId", "songName", "singerName");//为歌曲信息赋值
					System.out.println(songInfo.toString());
					playList.addToPlayList(songInfo);//将歌曲添加到PlayList类中的playList集合中
					Set<String> keySet = map.keySet();
					//遍历keySet
					for(String key:keySet) {
						//找到主播放列表
						if("主播放列表".equals(key)) {
							map.put(key,playList);
							playListCollection.setPlayListMap(map);//播放列表存储歌曲信息
							break;//添加完毕则跳出循环
						}
						
				}
			}
			break;//添加完歌曲信息后跳出switch
			//将歌曲添加到普通播放列表
			case 2:
				System.out.println("将歌曲添加到普通播放列表\n请输入要添加的播放列表名称:");
				String strPlayListName = in.next();//输入播放列表的名称
				/*
				 * 首先要判断歌曲添加到的普通播放列表存不存在
				 */
				boolean flag = true;
				//取得keySet
				Set<String> keySet = playListCollection.getPlayListMap().keySet();
				//遍历keySet
				for(String key:keySet) {
					//判断playListMap中是否存在要添加的播放列表
					if(strPlayListName.equals(key)) {
						/*
						 * 进入if说明找寻到了想要添加歌曲的播放列表,在if 语句里面完成歌曲的添加
						 */
						System.out.println("请输入要添加的歌曲的数量:");
						n = in.nextInt();
						for (int i = 0; i < n; i++) {
							System.out.println("请输入第" + (i + 1) + "首歌曲\n请输入歌曲id:");
							String songId = in.next();//输入歌曲的id
							//判断添加歌曲的id是否存在于主播放列表
							for(int k = 0; k < playList.getMusicList().size(); k++) {
								if(songId.equals(((Song)(playList.getMusicList()).get(k)).getId())) {
									/*
									 * 这里直接将主播放列表中的歌曲添加到普通播放列表中
									 */
									flag = false;
									break;//找到与主播放列表里面相同的id,直接跳出循环
								} 
							}
							if(flag) {
								flag = true;
								System.out.println("该歌曲在主播放列表不存在,继续输入歌曲的其他信息!");
							}
							System.out.println("请输入歌曲的名称:");
							String songName = in.next();//输入歌曲的名字
							System.out.println("请输入演唱者:");
							String singerName = in.next();//输入歌手的名字
							//判断主播放列表当中是否存在所要添加的歌曲id
							Song songInfo = new Song("songId", "songName", "singerName");//为歌曲信息赋值
							playList.addToPlayList(songInfo);//播放列表存储歌曲信息
						}
						flag = false;
					}
				}
				if(flag) {
					System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
				}
				/*
				 * 输出主播放列表和普通播放列表的所有信息
				 */
				
				break;
				
			/*
			 * 通过歌曲id查询播放列表中的歌曲
			 */
			case 3:
				
				break;
				
			/*
			 * 通过歌曲名称查询播放列表中的歌曲
			 */
			case 4:
				
				break;
				
			/*
			 * 修改播放列表中的歌曲
			 */
			case 5:
				
				break;
				
			/*
			 * 
			 */
			case 6:
				break;
				/*
				 * 显示播放列表中的歌曲
				 */
			case 7:
				
				break;
			
			/*
			 * 导出歌单 (输入输出流)
			 */
			case 8:
				break;
				
			case 9:
				n = 9;
				break;
			}
		}
		break;
		//播放器管理
		case 2:
			while(n!=9) {
			playListCollectionMenu();//播放器管理列表
			n = in.nextInt();//输入列表对应数字
			switch(n) {
			/*
			 * 向播放器添加列表
			 */
			case 1:
				System.out.println("向播放器添加播放列表\n输入要添加的播放列表名称:");
				String playListName = in.next();
				playList.setPlayListName(playListName);//列表名称的赋值
				playListCollection.addPlayList(playList);
				break;
				/*
				 * 从播放器中删除播放列表
				 */
			case 2:
				break;
				/*
				 * 通过播放列表的名称查询列表内的信息
				 */
			case 3:
				System.out.println("通过名字查询播放列表信息:"+"\n请输入要查询的播放列表名称:");
				playListName = in.next();//输入要查询的播放列表名称
				playListCollection.searchPlayListByName(playListName);
				break;
				/*
				 * 显示所有的播放列表名称
				 */
			case 4:
				playListCollection.displayPlayListName();
			}
		}
			break;
		case 0:
			n = 0;
			System.out.println("谢谢使用!");
			break;
		}
		}
	}

}


  • 问题原因:addToPlayList()方法中的musicList为null,原因是你在通过构造方法创建PlayList时,PlayList playList = new PlayList("主播放列表", null);参数2为null。改成PlayList playList = new PlayList("主播放列表", new ArrayList<Song>());就可以了~
    2017-09-14 10:26:47
  • 提问者 荒小北158 回复 irista23 #2
    谢谢 懂了!
    2017-09-15 20:54:00
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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