为什么不能显示普通列表的信息

为什么不能显示普通列表的信息

 switch (num3){
//添加主播放列表歌曲管理
case 1:System.out.println("**现在向主播放列表添加歌曲**");
System.out.println("输入要添加的歌曲id");
String songid=input.next();
System.out.println("输入要添加的歌曲名称");
String songName=input.next();
System.out.println("输入要添加的歌手名字");
String songer=input.next();
Song song=new Song(songid,songName,songer);
playList.addToPlayList(song);
break;
//添加到普通播放列表
case 2:System.out.println("**现在向普通播放列表添加歌曲**");
System.out.println("请输入要添加的列表名称");
String ordinaryListName=input.next();
System.out.println("输入要添加的歌曲id");
songid=input.next();
System.out.println("输入要添加的歌曲名称");
songName=input.next();
System.out.println("输入要添加的歌手名字");
songer=input.next();
Song song2=new Song(songid,songName,songer);
//判断播放列表是否存在
if(PLC.playmap.containsKey(ordinaryListName)){
((PlayList)PLC.playmap.get(ordinaryListName)).addToPlayList(song2);
}else{
System.out.println("播放列表不存在");
}
break;
case 3:System.out.println("输入要查询的歌曲id");
String serchsongid=input.next();
System.out.println(playList.serchSongByID(serchsongid));
break;
case 4:System.out.println("输入要查询的歌曲名称");
String serchsongName=input.next();
System.out.println(playList.serchSongBYName(serchsongName));
break;
case 5:System.out.println("输入要修改的歌曲id");
String updateId=input.next();//要修改的歌曲ID
playList.updateSong(updateId);
break;
case 6:System.out.println("请要删除的歌曲id");
String deleId=input.next();
playList.deleteSong(deleId);
break;
//显示播放列表歌曲的方法
case 7:playList.disPlayAllSong();break;
case 8:playList.exporPlayList();break;
case 9:break;
default:System.out.println("输入错误,请重新输入");
continue;
}

上面是播放列表的主方法

下面是播放器的主方法

 case 1:	int num2=0;//播放器变量
						do{	
						test.PlayerMenu();					
						System.out.println("请输入对应数字对播放器进行管理");
						num2=input.nextInt();
						switch (num2){						
							case 1:System.out.println("输入要添加的播放列表名称");
									String str=input.next();       //用于保存播放器的名称str
									PlayList ordinaryList=new PlayList();
									ordinaryList.setPlayListName(str); //给播放列表赋名
									PLC.addPlayList(ordinaryList);
									break;
							case 2:System.out.println("输入要删除播放列表名称");	
									//将找到的名字赋值给相关方法进行删除
									PLC.deletePlayList(PLC.getPlaymap().get(input.next()));
									break;
							case 3:System.out.println("通过名字找播放列表的信息");
									PLC.serchPlayByName(input.next());break;
							case 4:System.out.println("显示所有播放列表的名称");
									PLC.disPlayListName();break;
							case 9:break;
							default:System.out.println("输入错误,请重新输入");
									continue;
						}

以下是PlayList类的显示方法和添加歌曲的方法

//添加歌曲到播放列表
public void addToPlayList(Song song){
musiList.add(song);
}
//显示所有播放列表的歌曲
public void disPlayAllSong(){
System.out.println(musiList.toString());
}

问题是:为什么只能显示主播放列表的的歌曲信息,而不能显示普通播放列表的信息呢?需要两个List来存放歌曲吗?

正在回答 回答被采纳积分+1

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

3回答
好帮手慕珊 2017-03-12 12:05:57

这个是你的PlayList中的代码,部分修改了,部分自己参考着改一下。

package playsystem;


import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.Scanner;


public class PlayList {

private String playListName;//播放列表的名称

Scanner input=new Scanner(System.in);

//PlayList里面只有两个属性,播放列表名称和存放歌曲的ArrayList

//PlayListCollection PLC=new PlayListCollection();

//Song song;

ArrayList<Song> musiList=new ArrayList<Song>();//List集合用于存放歌曲

public PlayList(){

}

//

public PlayList(String playListName, ArrayList<Song> musiList) {

super();

this.playListName = playListName;

this.musiList = musiList;

}

public String getPlayListName() {

return playListName;

}

public void setPlayListName(String playListName) {

this.playListName = playListName;

}

//添加歌曲到播放列表

public void addToPlayList(Song song){

//首先判断歌曲是否存在,再添加,排除重复的情况

musiList.add(song);

}

//显示所有播放列表的歌曲

public void disPlayAllSong(){

System.out.println(musiList.toString());

}

//通过ID名来搜索歌曲

//返回值应为Song类的对象,这个方法改过了

public Song serchSongByID(String id){

Song song=null;

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

if(((Song)(musiList.get(i))).getId().equals(id)){

song=musiList.get(i);

}

}

return song;

}

//通过歌名来搜索歌曲

//这个方法照上面的自己改一下

public String serchSongBYName(String name){

String str=null;

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

if(((Song)(musiList.get(i))).getName().equals(name)){

str=musiList.get(i).toString();

}

}

return str;

}

//修改歌曲的方法   用的是添加的方法

public void updateSong(String id){

//先判断歌曲是否存在,然后再输入信息进行修改

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

if(((Song)(musiList.get(i))).getId().equals(id)){

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

String name=input.next();

System.out.println("请输入要修改的歌手名字");

String singer=input.next();

musiList.get(i).setName(name);

musiList.get(i).setSonger(singer);

System.out.println("修改成功");

}

}

}

//删除歌曲的方法,这个改过了,修改可以参考这个做

public void deleteSong(String id){

//删除歌曲,先查询是否存在,再删除

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

// if(((Song)(musiList.get(i))).getId().equals(id)){

// musiList.remove(i);

// }

//}

Song song=this.serchSongByID(id);

if(song!=null){

musiList.remove(song);

System.out.println("删除成功");

}else{

System.out.println("该歌曲不存在!");

}

}

//导出歌单的方法,这个方法改过了

public void exporPlayList(){

FileOutputStream fis;

ObjectOutputStream fos;

try {

fis=new FileOutputStream("c:\\imooc\\score.txt");

fos=new ObjectOutputStream(fis);

//要循环输出musicList中的song

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

fos.writeObject(musiList.get(i));

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e){

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}


提问者 小明2017 2017-03-11 21:30:15


package playsystem;

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

public class PlayListCollection {
	public PlayListCollection(){
		
	}
	//创建Map属性
	Map<String,PlayList> playmap=new HashMap<String,PlayList>();

	public Map<String, PlayList> getPlaymap() {
		return playmap;
	}

	public void setPlaymap(Map<String, PlayList> playmap) {
		this.playmap = playmap;
	}
	//向播放器添加播放列表
	public void addPlayList(PlayList ordinaryList){	
		
		playmap.put(ordinaryList.getPlayListName(), ordinaryList);
	}
	//删除播放列表
	 public void deletePlayList(PlayList playList){
		 if(playmap.containsKey(playList.getPlayListName())){
			 playmap.remove(playList.getPlayListName());
			 
		 }
	 }
	 //通过名字查列表
	 public PlayList serchPlayByName(String playListName){
		 if(playmap.containsKey(playListName)){
			 System.out.println("该播放列表存在!");
			 System.out.println("该播放列表的名称是:"+playListName);			
		 }
		 return playmap.get(playListName);
	 }
	//显示所有播放列表
	 public void disPlayListName(){
		 Set<Entry<String,PlayList>> mapset=playmap.entrySet();
		 for(Entry<String,PlayList> newmapset:mapset){
			 System.out.println(newmapset.getKey());
			 System.out.println(newmapset.getValue());			 
		 }
	 }
	

这个是PlayListCollection类的代码,这个强制转换是之前出现问题后我加上的,加上一样解决不了问题, 显示普通列表的歌曲总是输出null值,查到头大都想不出问题出在那里。求指点迷津。

好帮手慕珊 2017-03-11 14:18:40

//判断播放列表是否存在

if(PLC.playmap.containsKey(ordinaryListName)){

((PlayList)PLC.playmap.get(ordinaryListName)).addToPlayList(song2);

}else{

System.out.println("播放列表不存在");

}

这段代码,你做了一个强制转换,把PLC.playmap转换成了PlayList类型,正常情况下playmap就应该是PlayList类型的。把你的PlayListCollection类截个图吧。

  • 提问者 小明2017 #1
    (资料在上面那个回复)这个是PlayListCollection类的代码,这个强制转换是之前出现问题后我加上的,加上一样解决不了问题, 显示普通列表的歌曲总是输出null值,查到头大都想不出问题出在那里。求指点迷津
    2017-03-11 21:47:03
  • 好帮手慕珊 回复 提问者 小明2017 #2
    你好!代码本身是没有问题的,你是不是把播放器管理和播放列表管理两个菜单分在两个方法里写了,这里要注意PlayListCollection必须是一个。你确认一下,实在不行就把作业交了吧,用整体的代码看问题。
    2017-03-12 10:44:21
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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