其他的播放列表会自动添加输入的歌曲信息,即使创建一个空的播放列表去显示,也会显示出之前添加的数据

其他的播放列表会自动添加输入的歌曲信息,即使创建一个空的播放列表去显示,也会显示出之前添加的数据

package com.imooc.player;


import java.io.Serializable;


/**

 * @author Administrator

 *歌曲类

 */

public class Song implements Serializable{

/**

*/

private static final long serialVersionUID = 8928597047484314298L;

private String id; // 歌曲id

private String name; // 歌曲名

private String singer; // 演唱者


public Song() {

}

//构造方法,实现对歌曲ID,歌曲名,演唱者的赋值

public Song(String id, String name, String singer) {

this.id = id;

this.name = name;

this.singer = singer;

}

//get和set方法

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;

}


@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 ;

}


}



package com.imooc.player;


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;


/**

 * @author Administrator 播放列表类 属性: -播放列表名称(playListName):字符串类型

 *         -播放列表中的歌曲集合(musicList):List类型 方法: 构造方法 getter和setter方法

 *         将歌曲添加到播放列表:public void addToPlayList(Song song); 显示播放列表中所有歌曲:public

 *         void displayAllSong(); 通过id查询歌曲:public Song searchSongById(String

 *         id); 通过名称查询歌曲:public Song searchSongByName(String n); 修改歌曲:public

 *         void updateSong(Stirng id,Song song); 从播放列表删除歌曲:public void

 *         deleteSong(String id); 导出歌单 :public void exportPlayList();

 */

public class PlayList {

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

private List<Song> musicList; // 播放列表中的歌曲集合

Scanner sc = new Scanner(System.in);


// 无参构造

public PlayList() {

this.musicList = new ArrayList<>();

}


// 有参构造

public PlayList(List<Song> musicList) {

this.musicList = musicList;

}


// get和set方法

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;

}


/**

* 将歌曲添加到播放列表

* @param song

*/

public void addToPlayList(Song song) {

System.out.println("请输入要添加的歌曲的数量:");

int n = sc.nextInt();

for (int i = 0; i < n; i++) {

boolean flag = true;

System.out.println("请输入第" + (i + 1) + "首歌曲:");

String str = null;

while (flag) {

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

str = sc.next();

if (musicList.size() == 0) {

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

String name=sc.next();

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

String name1=sc.next();

Song son=new Song(str,name,name1);

musicList.add(son);

flag = false;

} else {

List<String> l = new ArrayList<>();

for (Song s : musicList) {

String id = s.getId();

l.add(id);

}

if (l.contains(str)) {

System.out.println("该歌曲id已存在,请重新输入:");

} else {

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

String name=sc.next();

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

String name1=sc.next();

Song son=new Song(str,name,name1);

musicList.add(son);

flag = false;

}

}

}

}


}


/**

* 显示播放列表中的所有歌曲

*/

public void displayAllSong() {

if (getMusicList().size()==0) {

System.out.println("播放列表为空,没有歌曲信息!");

} else {

for (Song s : getMusicList()) {

System.out.println(s);

}

}

}


/**

* 通过id查询歌曲

* @param id

* @return

*/

public Song searchSongById(String id) {

boolean flag = true;

for (Song s : musicList) {

if (id.equals(s.getId())) {

System.out.println("该歌曲的信息为:\n" + s);

flag = false;

break;

}

}

if (flag) {

System.out.println("播放列表没有该歌曲!");

}

return null;

}


/**

* 通过名称查询歌曲

* @param name

* @return

*/

public Song searchSongByName(String name) {

boolean flag = true;

for (Song s : musicList) {

if (name.equals(s.getName())) {

System.out.println("该歌曲的信息为:\n" + s);

flag = false;

break;

}

}

if (flag) {

System.out.println("播放列表没有该歌曲!");

}

return null;

}


/**

* 修改歌曲

* @param id

* @param song

*/

public void updateSong(String id, Song song) {

boolean flag = true;

for (Song s : musicList) {

if (id.equals(s.getId())) {

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

s.setName(sc.next());

System.out.println("请输入修改后的演唱者:");

s.setSinger(sc.next());

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

flag = false;

break;

}

}

if (flag) {

System.out.println("要修改的歌曲不存在!");

}

}


/**

* 从播放列表删除歌曲

* @param id

*/

public void deleteSong(String id) {

boolean flag = true;

for (Song s : musicList) {

if (id.equals(s.getId())) {

musicList.remove(s);

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

flag = false;

return;

}

}

if (flag) {

System.out.println("要删除的歌曲已不存在!");

}

}


/**

* 导出歌单

*/

public void exportPlayList() {

try {

FileOutputStream fos = new FileOutputStream(playListName + "的歌单.txt");

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(musicList);

oos.flush();

oos.close();

System.out.println("导出成功!");

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}



package com.imooc.player;


import java.util.HashMap;

import java.util.Map;

import java.util.Scanner;

import java.util.Set;


/**播放器类

 * @author Administrator

 * 属性:

 *      - 存放播放列表的集合(playListMap):Map

 * 方法:

 *      -构造方法

 *      -getter和setter方法

 *     -添加播放列表:public void addPlayList(PlayList playList);

 *     -删除播放列表:public void deletePlayList(PlayList playList);

 *   -通过名字查询:public PlayList searchPlayListByName(String playListName);

 *   -显示所有播放列表名称:public void displayPlayListName();

 */

public class PlayListCollection {

private Map<String,PlayList> playListMap;

Scanner sc=new Scanner(System.in);

//无参构造

public PlayListCollection() {

this.playListMap=new HashMap<>();

}

//有参构造

public PlayListCollection(Map<String,PlayList> playListMap) {

this.playListMap=playListMap;

}

//get和set方法

public Map<String, PlayList> getPlayListMap() {

return playListMap;

}

public void setPlayListMap(Map<String, PlayList> playListMap) {

this.playListMap = playListMap;

}

/**添加播放列表

* @param playList

*/

public void addPlayList(PlayList playList) {

System.out.println("输入要添加的播放列表名称:");

String name=sc.next();

if(playListMap.containsKey(name)) {

System.out.println("该播放列表已存在!");

}else {

playListMap.put(name, playList);

System.out.println("添加成功!");

}

}

/**删除播放列表

* @param playList

*/

public void deletePlayList(PlayList playList) {

System.out.println("输入要删除的播放列表名称:");

String n=sc.next();

if(playListMap.containsKey(n)) {

playListMap.remove(n);

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

}else {

System.out.println("没有要找的播放列表!");

}

}

/**通过名字查询播放列表

* @param playListName

* @return

*/

public PlayList searchPlayListByName(String playListName) {

PlayList playList=null;

if(playListMap.containsKey(playListName)) {

System.out.println("该播放列表存在!\n列表中的歌曲信息为:");

playList= playListMap.get(playListName);

}else {

System.out.println("没有找到要查询的播放列表!");

}

return playList;

}

/**

* 显示所有播放列表名称

*/

public void displayPlayListName() {

System.out.println("播放器中的播放列表信息如下:");

if(playListMap.size()==0) {

System.out.println("播放器为空!");

}else {

Set<String> keySet=playListMap.keySet();

for(String n:keySet) {

System.out.println(n);

}

}

}

}





package com.imooc.player;


import java.util.Iterator;

import java.util.Map;

import java.util.Scanner;


/**

 * 包含对歌曲类、播放列表类以及播放器类的测试方法以及对主流程的控制

 * 

 * @author Administrator

 *

 */

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

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

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(" 5:返回上一级菜单");

System.out.println("*********************************");

System.out.println(" 请输入对应的数字对播放器进行管理:");

}


public static void main(String[] args) {

Song song = new Song();

PlayList playList = new PlayList();

PlayListCollection plc = new PlayListCollection();

TestDemo test = new TestDemo();

Scanner s = new Scanner(System.in);

boolean flag = true;

while (flag) {

test.mainmenu(); // 主菜单

int i = s.nextInt();

switch (i) {

case 1:

boolean flag1 = true;

// test.playlistmenu(); //播放列表管理菜单

while (flag1) {

test.playlistmenu();

i = s.nextInt();

switch (i) {

case 1:

if (plc.getPlayListMap().containsKey("主播放列表")) {

System.out.println("将歌曲添加到主播放列表:");

playList.addToPlayList(song);

plc.getPlayListMap().put("主播放列表", playList);

System.out.println("歌曲添加成功!");

} else {

playList.setPlayListName("主播放列表");

plc.getPlayListMap().put(playList.getPlayListName(), playList);

System.out.println("将歌曲添加到主播放列表:");

playList.addToPlayList(song);

plc.getPlayListMap().put("主播放列表", playList);

System.out.println("歌曲添加成功!");

}


break;


case 2:

System.out.println("将歌曲添加到普通播放列表!");

System.out.println("请输入要添加的播放列表名称:");

String name = s.next();

if (plc.getPlayListMap().size() == 1 && plc.getPlayListMap().containsKey("主播放列表")) {

System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");

} else {

if (plc.getPlayListMap().containsKey(name)) {

playList.addToPlayList(song);

plc.getPlayListMap().put(name, playList);

System.out.println("歌曲添加成功!");

} else {

System.out.println("该播放列表不存在,请先将播放列表添加到播放器中!");

}


}

break;


case 3:

System.out.println("通过歌曲id查询播放列表中的歌曲");

System.out.println("请输入要查询的播放列表:");

String n = s.next();

if (plc.getPlayListMap().containsKey(n)) {

System.out.println("请输入要查询的歌曲id:");

String id = s.next();

playList.searchSongById(id);

} else {

System.out.println("没有要查询的播放列表!");

}

break;


case 4:

System.out.println("通过歌曲名称查询播放列表中的歌曲");

System.out.println("请输入要查询的播放列表:");

String m = s.next();

if (plc.getPlayListMap().containsKey(m)) {

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

String name1 = s.next();

playList.searchSongByName(name1);

} else {

System.out.println("没有要查询的播放列表:");

}

break;


case 5: // 修改一个歌曲信息之后,其他的列表信息也被修改

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

String id = s.next();

Iterator<String> keyIt = plc.getPlayListMap().keySet().iterator();

while (keyIt.hasNext()) {

String keyName = keyIt.next();

playList = plc.getPlayListMap().get(keyName);

playList.updateSong(id, song);

}

break;


case 6:

System.out.println("请输入要删除的歌曲所在的播放列表:");

n = s.next();

if (plc.getPlayListMap().containsKey(n)) {

if (n.equals("主播放列表")) {

System.out.println("请输入要删除的歌曲id:");

id = s.next();

Iterator<String> keyIt1 = plc.getPlayListMap().keySet().iterator();

while (keyIt1.hasNext()) {

String keyName = keyIt1.next();

playList = plc.getPlayListMap().get(keyName);

playList.deleteSong(id);

}

} else {

System.out.println("请输入要删除的歌曲id:");

id = s.next();

plc.getPlayListMap().get(n).deleteSong(id);

}

} else {

System.out.println("没有这个播放列表!");

}


break;


case 7:

System.out.println("显示播放列表中的歌曲:");

System.out.println("请输入要显示的播放列表:");

n = s.next();

plc.searchPlayListByName(n);

playList.displayAllSong();

break;


case 8:

playList.exportPlayList();

break;


case 9:

flag1 = false;

break;


default:

System.out.println("输入信息不正确,请重新输入:");

break;

}

}

break;


case 2:

boolean flag6 = true;

// test.playermenu(); //播放器菜单

while (flag6) {

test.playermenu();

i = s.nextInt();

switch (i) {


case 1:

System.out.println("向播放器中添加播放列表");

plc.addPlayList(playList);

break;


case 2:

System.out.println("从播放器中删除播放列表");

plc.deletePlayList(playList);

break;


case 3:

System.out.println("通过名字查询播放列表信息");

System.out.println("请输入要查询的播放列表名称:");

String playListName=s.next();

plc.searchPlayListByName(playListName);

playList.displayAllSong();

break;


case 4:

System.out.println("显示所有播放列表名称");

plc.displayPlayListName();

break;

case 5:

flag6 = false;

break;

default:

System.out.println("输入信息不正确,请重新输入:");

break;

}

}

break;

case 0:

System.out.println("退出成功!");

flag = false;

System.exit(0);

default:

System.out.println("输入信息有误,请重新输入:");

}

}


}


}


正在回答

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

2回答

在显示播放列表中的歌曲时,playList.displayAllSong();这时的playList指的是普通列表,所以只显示普通播放列表的信息。应该用一个新的PlayList对象来接收返回的播放列表名称,用新的对象来显示歌曲信息。代码如下:

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

好帮手慕阿满 2018-09-19 18:07:03

同学从头至尾都只使用一个PlayList类对象playList,所以向任何一个播放列表中添加歌曲,查询其他播放列表中的歌曲都能查到。建议主播放列表和普通播放列表使用不同的PlayList对象。

PlayList类中的有参构造改为:

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

添加播放列表到播放器的方法中只写添加语句,输入语句在case后写,

 http://img1.sycdn.imooc.com//climg/5ba21f7e0001a97004010274.jpghttp://img1.sycdn.imooc.com//climg/5ba21f9e00014f1904050200.jpg

 

在main方法中直接将主播放列表插入到播放器中,如图:

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

 

这样向主播放列表插入歌曲其他播放列表就不会查出来了。

如果我的回答解决了你的疑惑,请采纳!祝:学习愉快!

  • 提问者 qq_青鱼_1 #1
    按照你说的去改以后,出现了新的问题,就是添加完普通播放列表的信息以后,主播放列表的信息没有了,变成了普通播放列表的信息
    2018-09-19 19:30:13
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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