测试“将歌曲添加到播放列表方法”时,总提示空指针异常?求解答!

测试“将歌曲添加到播放列表方法”时,总提示空指针异常?求解答!

package com.yang.musicmanagertest;

public class Song {
	// 属性
	private String id;
	private String name;
	private String singer;

	// 构造方法
	public Song() {
		
	}
	public Song(String id, String name, String singer) {
		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;
	}
	// hashcode and 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) || (obj.getClass() != this.getClass()))
			return false;
        Song song=(Song) obj;
        if(song.id==this.id && song.name==this.name && song.singer==this.singer)
        	return true;
        else
        	return false;
        
	}
	// toString方法

	@Override
	public String toString() {
		return " 歌曲id:" + id + ", 歌名:" + name + ", 演唱者:" + singer;
	}

}

package com.yang.musicmanagertest;


import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;


public class PlayList {

// 属性

private String playListName;

private ArrayList<Song> musicList =null;


// 构造方法

public PlayList() {


}


public PlayList(String playListName, ArrayList<Song> 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<Song> getMusicList() {

return musicList;

}


public void setMusicList(ArrayList<Song> musicList) {

this.musicList = musicList;

}


// 将歌曲添加到播放列表方法

public void addToPlayList(Song song) {

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();

System.out.println("请输入歌曲的名称:");

String name = sc.next();

System.out.println("请输入演唱者:");

String singer = sc.next();

song=new Song(id,name,singer);

this.musicList.add(i,song);

}

sc.close();

}


// 显示播放器列表中所有歌曲方法

public void displayAllSong(List<Song> musicList) {

for (int i = 0; i < musicList.size(); i++) {

System.out.println(musicList.get(i));

}

}


// 通过id查询歌曲

public Song searchSongById(String id) {

Song song = null;

for (int i = 0; i < musicList.size(); i++) {

if (((Song) (musicList.get(i))).getId() == id) {

song = (Song) (musicList.get(i));

break;

} else

System.out.println("没有查询到歌曲信息。");


}

return song;

}

// 通过歌名查询歌曲

}

package com.yang.musicmanagertest;


import java.util.ArrayList;

import java.util.Scanner;


public class TestDemo {


public static void main(String[] args) {

// 创建对象

Song song = null;

PlayList pl = null;

TestDemo td=new TestDemo();

//显示主菜单

td.mainMenu();

Scanner sc = new Scanner(System.in);

int num = sc.nextInt();

switch (num) {

case 0:

sc.close(); 

break;

case 1: 

td.playListManagerMenu();

int num1=sc.nextInt();

switch(num1) {

case 1:

ArrayList<Song> musicList=null;

pl=new PlayList("主播放列表", musicList);

pl.addToPlayList(song);

}

}

}


// 主菜单

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 playListManagerMenu() {

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("请输入对应的数字对播放列表进行管理:");

}

}


正在回答

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

2回答

在pl.addToPlayList(song);时会执行到musicList.add(i,song);musicList这时还为空了吧?你还没有实例化PlayList呢。pl=new PlayList("主播放列表", musicList);之前musicList为空。祝:学习愉快

  • wo蜗牛niu 提问者 #1
    非常感谢!
    2018-04-16 22:13:03
  • wo蜗牛niu 提问者 #2
    pl不就是PlayList的实例化对象吗?还是没搞明白。 pl=new PlayList("主播放列表", musicList);之前musicList为空。在musicList.add(i,song);之前没有存储歌曲信息应该为空啊?
    2018-04-16 22:15:46
irista23 2018-04-17 09:59:05

把如下红框中的代码改成:ArrayList<Song> musicList=new ArrayList<Song>();这样分配空间后就不会把null空数据传进去了。

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

  • 提问者 wo蜗牛niu #1
    谢谢大神指点!
    2018-04-17 16:38:08
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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