有如下问题,望详细解答
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
* 属性 playListMap map
* @author RYAN
*getter,setter方法
*public void addPlayList(PlayList pl);添加播放列表
*public void deletePlayList(PlayList lp);删除播放列表
*public PlayList searchPlayListByName();通过名称查询播放列表;
*public void displayAllPlayListName();显示所有播放列表名称;
*/
public class PlayListCollection {
private Map<String, PlayList> playListMap;
public PlayListCollection() {
Map<String,PlayList> plc=new HashMap<>();
this.playListMap=plc;
}
//public PlayListCollection(Map<String, PlayList> playListMap) {
// super();
// this.playListMap = playListMap;
//}
public Map getPlayListMap() {
return playListMap;
}
public void setPlayListMap(Map playListMap) {
this.playListMap = playListMap;
}
//添加播放列表
public void addPlayList(PlayList pl) {
Scanner s=new Scanner(System.in);
System.out.println("向播放器中添加播放列表");
System.out.println("请输入要添加的播放列表的名称:");
String name=s.next();
pl.setPlayListName(name);
playListMap.put(name,pl);
System.out.println("添加播放列表成功~");
}
//删除播放列表
public void deletePlayList(PlayList dp) {
System.out.println("请输入要删除的播放列表名称:");
Scanner sc=new Scanner(System.in);
String deName=sc.next();
if(playListMap.containsKey(deName)) {
playListMap.remove(deName);
System.out.println("成功将该播放列表删除~");
}
else {
System.out.println("你要删除的播放列表不存在,请先添加至播放列表~");
}
}
//通过名称查询播放列表;
public void searchPlayListByName() {
Scanner s =new Scanner(System.in);
System.out.println("通过播放列表名称进行查询");
System.out.println("请输入要查询的播放列表名称:");
String n=s.next();
if(playListMap.containsKey(n)) {
System.out.println("该播放列表存在~");
System.out.println( "该播放列表的名称为"+n);
System.out.println("播放列表的所有歌曲为:");
for(Song song:playListMap.get(n).musicList) {
System.out.println(song);
}
}
else {
System.out.println("该播放列表不存在,请先添加该播放列表~");
}
}
//显示所有播放列表名称;
public void displayAllPlayListName() {
Iterator<PlayList> it= playListMap.values().iterator();
while(it.hasNext()) {
System.out.println(it.next().getPlayListName());
}
}
}import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
/**
*属性有playListName(播放列表名称),musicList(播放列表的歌曲集合)
* @author RYAN
*构造方法,getter,setter方法
*public void addToPlayList(Song song);将歌曲添加到播放列表
*public void displayAllSong();显示播放列表所有歌曲;
*public Song searchSongById(String id);通过歌曲id查询歌曲
*public Song searchSongByName(String name);通过歌曲名称查询歌曲;
*public void updateSong(Song song);修改歌曲;
*public void deleteSong(String id);删除歌曲;
*public void exportPlayList();导出播放列表
*/
public class PlayList {
String playListName;
List<Song> musicList=new ArrayList<Song>();
public PlayList(String playListName){
List playList=new ArrayList();
this.playListName = playListName;
}
public String getPlayListName() {
return playListName;
}
public void setPlayListName(String playListName) {
this.playListName = playListName;
}
public List<Song> getMusicList() {
return musicList;
}
public void setMusicList(List<Song> musicList) {
this.musicList = musicList;
}
public PlayList(String playListName, List<Song> musicList) {
super();
this.playListName = playListName;
this.musicList = musicList;
}
public PlayList() {
super();
// TODO Auto-generated constructor stub
}
//将歌曲添加到播放列表
public void addToPlayList(Song song) {
System.out.println("将歌曲添加到主播放列表~");
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();
song.setId(id);
System.out.println("请输入歌曲的名称:");
String name=sc.next();
song.setName(name);
System.out.println("请输入歌曲的演唱者:");
String singer=sc.next();
song.setSinger(singer);
musicList.add(song);
System.out.println("添加歌曲成功~");
}
}
public void addToNormalPlayList(Song song) {
PlayListCollection plc=new PlayListCollection();
PlayList pl=new PlayList();
Scanner sc=new Scanner(System.in);
System.out.println("将歌曲添加到普通放列表~");
System.out.println("请输入要添加的播放列表名称:");
String normalName=sc.next();
if(plc.getPlayListMap().containsKey(normalName)) {
System.out.println("请输入要添加歌曲的数量:");
int n=sc.nextInt();
for(int i=0;i<n;i++) {
System.out.println("请输入第"+(i+1)+"首歌曲的信息");
System.out.println("请输入歌曲的id:");
String id=sc.next();
song.setId(id);
System.out.println("请输入歌曲的名称:");
String name=sc.next();
song.setName(name);
System.out.println("请输入歌曲的演唱者:");
String singer=sc.next();
song.setSinger(singer);
((List<Song>) plc.getPlayListMap().get(normalName)).add(song);
System.out.println("添加歌曲成功~");
}
}
else {
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中~");
}
}
//显示播放列表所有歌曲;
public void displayAllSong() {
for(Song s:musicList) {
System.out.println(s);
}
// Iterator<Song> it= musicList.iterator() ;
// while(it.hasNext()) {
//
// System.out.println(it.next());
// }
}
//通过歌曲id查询歌曲
public Song searchSongById(String id) {
return null;
}
//通过歌曲名称查询歌曲
public Song searchSongByName(String name) {
return null;
}
//修改歌曲
public void updateSong(Song song) {
}
//删除歌曲
public void deleteSong(String id) {
}
//导出播放列表
public void exportPlayList() {
}在PlayListCollection 中,addPlayList方法,添加后调用显示所有播放列表,会覆盖前面添加的播放列表,全部显示最后添加的播放列表,哪里出问题了?
在添加普通不放列表中addNormalPlayList()方法中,在判断语句下,不管是否存在输入的列表,总是显示不存在,测试了一下,调用该方法后实例化的PlayListMap你面的值总是空的,什么原因?
在构造方法中实例化,是不是每次调用构造方法实例化时,都会重新赋值,先前PlayListMap里的值是不是就没了,怎样避免这种情况?
比较笨,希望能说明白,前面提了很多问题,回答的都不怎么明白,感觉不是在回答我的问题
正在回答
1、在PlayListCollection 中,addPlayList方法,添加后调用显示所有播放列表,会覆盖前面添加的播放列表,全部显示最后添加的播放列表,哪里出问题了?
在代码中 pl.setPlayListName(name); playListMap.put(name,pl);每次都是修改的pl的名字,播放列表对象还是之前创建的,所以再次添加到map中的时候,因为map不允许添加重复数据,所以不会再添加一次,只是把之前播放列表的名字修改了。如果代码像你这样写,不用参数也行,在String name=s.next();语句后面创建一个新的PlayLsit的对象p1,然后再执行下面的操作就可以了。
public void addPlayList(PlayList pl) {
Scanner s=new Scanner(System.in);
System.out.println("向播放器中添加播放列表");
System.out.println("请输入要添加的播放列表的名称:");
String name=s.next();
pl.setPlayListName(name);
playListMap.put(name,pl);
System.out.println("添加播放列表成功~");
}2、添加普通不放列表中addNormalPlayList()方法中,在判断语句下,不管是否存在输入的列表,总是显示不存在,测试了一下,调用该方法后实例化的PlayListMap你面的值总是空的,什么原因?
在这个方法中每次PlayListCollection都是重新定义一遍,根本就不是之前的PlayListCollection对象,所以肯定找不到里面的内容。可以给方法定义一个参数,把PlayListCollection作为参数传进来,要保证操作的都是一个PlayListCollection对象才行。
3、在构造方法中实例化,是不是每次调用构造方法实例化时,都会重新赋值,先前PlayListMap里的值是不是就没了,怎样避免这种情况?
调用构造方法后,就是创建一个新的对象了,按照第二个问题中的方式改变,可以保证是同一个PlayListCollection对象即可。
祝学习愉快!
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星