请教老师关于普通列表集合问题
我在创建普通列表时先判断此列表是否存在,如果存在就添加歌曲,没的话就新建了一个,再放进map里面,但是弄完后怎样才能把歌单放进普通列表的一个新建列表中呢,添加完歌单后不显示而主播放列表歌单显示了,请老师看下代码。
public class PlayList {//播放列表类
private String playListName;//播放列表名称
private List<Song> musicList;//播放列表中的歌曲集合
PlayListCollection oo=new PlayListCollection();
public PlayList(String playListName,List<Song> musicList){
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<String,PlayList> playListMap;
public PlayListCollection(){
this.playListMap=playListMap;
playListMap=new HashMap<String, PlayList>();
}
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();
if(playListMap.containsKey(name)==true){
System.out.println("该播放列表已存在");
}else{
List<Song> newList=new ArrayList<Song>();
playList=new PlayList(name,newList);
newList.add(null);
playListMap.put(name,playList);
System.out.println("播放列表添加成功!");
}
}
public void deletePlayList(PlayList playList){//删除播放列表
}
public PlayList searchPlayListByName(String playListName){//通过名字查询
return null;
}
public void displayPlayListName(){//显示所以播放列表名称
Iterator<PlayList> it=playListMap.values().iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}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("主播放列表", null);
PlayList two=new PlayList(null, null);
List<Song> plc=new ArrayList<Song>();
List<Song> puto=new ArrayList<Song>();
//plc.addAll(one.getMusicList());
PlayListCollection gg=new PlayListCollection();
(gg.getPlayListMap()).put("主播放列表", one);
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);
System.out.println("主播放列表:");
one.displayAllSong();
System.out.println("普通播放列表:");
two.displayAllSong();
break;
case 2:
System.out.println("将歌曲添加到普通播放列表");
System.out.println("请输入要添加的播放列表名称");
String a=hh.next();
if((gg.getPlayListMap()).containsKey(a)==true){
two.addToPlayList(null);
break;
}else{
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
}
System.out.println("主播放列表:");
one.displayAllSong();
System.out.println("普通播放列表:");
two.displayAllSong();
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(null);
break;
case 2:
break;
case 3:
break;
case 4:
gg.displayPlayListName();
break;
case 9:
flag=false;
break;
}
break;
}
}
}
}
}正在回答
你的two普通播放列表内容是空的,参照如下修改
public static void main(String[] args) {
PlayList one = new PlayList("主播放列表");
PlayList two = new PlayList(null);
PlayListCollection plCollection = new PlayListCollection();
……
case 2:
System.out.println("将歌曲添加到普通播放列表");
System.out.println("请输入要添加的播放列表名称");
String a = hh.next();
two=plCollection.searchPlayListByName(a);
if ((gg.getPlayListMap()).containsKey(a) == true) {
//id和演唱者需要接收输入传进去,并且需要判断该id的歌曲是否在主播放列表存在
two.addToPlayList(new Song("id",a,"演唱者"));
break;
} else {
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
}
……
PlayListCollection类:
public PlayList searchPlayListByName(String playListName) {// 通过名字查询
PlayList playList=null;
Set<String> playListSet=playListMap.keySet();
for(String s:playListSet){
if(s.equals(playListName)){
playList=playListMap.get(s);break;
}
}
return playList;
}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);
for(int i=0;i<musicList.size();i++){
if(song.getId().equals(musicList.get(i).getId())){
System.out.println("该歌曲已经存在!");
return;
}
}
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 Song searchSongByName(String n){//通过名称查询歌曲
return null;
}
public void updateSong(Song song){//修改歌曲
}
public void deleteSong(String id){//从播放列表删除歌曲
}
public void displayAllSong(){//显示播放列表中所有的歌曲
for(int n=0;n<musicList.size();n++){
System.out.println(musicList.get(n));
}
}
public void exportPlayList(){//导出歌单
}
}public class PlayListCollection {//播放器类
private Map<String,PlayList> playListMap;
public PlayListCollection(){
this.playListMap=playListMap;
playListMap=new HashMap<String, PlayList>();
}
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();
if(playListMap.containsKey(name)==true){
System.out.println("该播放列表已存在");
}else{
List<Song> newList=new ArrayList<Song>();//添加新的普通列表
playList=new PlayList(name);
newList.add(null);
playListMap.put(name,playList);
System.out.println("播放列表添加成功!");
}
}
public void deletePlayList(PlayList playList){//删除播放列表
}
public PlayList searchPlayListByName(String playListName){//通过名字查询
return null;
}
public void displayPlayListName(){//显示所以播放列表名称
Set<Entry<String,PlayList>> entrySet=playListMap.entrySet();
for(Entry<String,PlayList> entry:entrySet){
System.out.println(entry.getKey());
}
}
}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(null);
List<Song> plc=new ArrayList<Song>();
List<Song> puto=new ArrayList<Song>();
//plc.addAll(one.getMusicList());
PlayListCollection gg=new PlayListCollection();
(gg.getPlayListMap()).put("主播放列表", one);
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);
System.out.println("主播放列表:");
one.displayAllSong();
System.out.println("普通播放列表:");
two.displayAllSong();
break;
case 2:
System.out.println("将歌曲添加到普通播放列表");
System.out.println("请输入要添加的播放列表名称");
String a=hh.next();
if((gg.getPlayListMap()).containsKey(a)==true){
two.addToPlayList(null);
break;
}else{
System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");
}
System.out.println("主播放列表:");
one.displayAllSong();
System.out.println("普通播放列表:");
two.displayAllSong();
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(null);
break;
case 2:
break;
case 3:
break;
case 4:
gg.displayPlayListName();
break;
case 9:
flag=false;
break;
}
break;
}
}
}
}
}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 ;
}
}上述代码做如下调整:
1、PlayList类
1)去掉PlayListCollection oo=new PlayListCollection();无用代码
2)addToPlayList(Song song)方法里要先遍历播放列表的歌曲集合List<Song>,判断播放列表中的歌曲是否存在,如果不存在再进行add(song)添加操作。在测试类中直接PlayList mainPlayList = new PlayList("主播放列表");创建主播放列表,再创建Song对象,主方法中添加就是调用addToPlayList(song)方法。
3)下图参数id没有用上,equals比较的应该是传入的id,输入放到测试类中,并且返回找到的Song对象,找不到返回null。

2、PlayListCollection类
1)addPlayList(PlayList playList)方法中,map的key不能重复,所以这里只需要一行代码

注意name可以直接通过playList.getPlayListName()代替
2)displayPlayListName()方法遍历显示的PlayList对象,需要显示Set<String> 播放列表名称。
相似问题
登录后可查看更多问答,登录/注册
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星