老师两处问题,为什么我在那个地方添加break语句会报错 ,还有导出歌单时会报错

来源:4-7 自由编程

眼睛眯起来

2020-08-07 23:02:11

package player;


import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.io.Serializable;

import java.util.Scanner;


public class TestDemo implements Serializable{

// 对歌曲类Song进行测试的方法

public void testSong() {

Song song1 = new Song("s001", "两只老虎", "小太阳");

Song song2 = new Song("s002", "小燕子", "风车");

Song song3 = new Song("s003", "茉莉花", "彩虹");

Song song4 = new Song("s001", "两只老虎", "小太阳");


System.out.println(song1);

// 测试song1和song4这两个对象是否相等

System.out.println("song1==song4" + (song1.equals(song4)));

}


// 对播放器列表PlayList进行测试

public void testPlayList() {

// 定义及格Song类的对象,添加到播放列表中

Song song1 = new Song("s001", "两只老虎", "小太阳");

Song song2 = new Song("s002", "小燕子", "风车");

Song song3 = new Song("s003", "茉莉花", "彩虹");

Song song4 = new Song("s001", "两只老虎", "小太阳");

// 创建一个PlayList对象

PlayList mainPlayList = new PlayList("主播放列表");

mainPlayList.addToPlayList(song1);

mainPlayList.addToPlayList(song2);

mainPlayList.addToPlayList(song3);

mainPlayList.addToPlayList(song4);

// 显示播放列表的内容

mainPlayList.displayAllSong();

// 通过id查询歌曲信息

Song song = mainPlayList.searchSongById("s002");

if (song != null) {

System.out.println("根据id查询的歌曲信息" + song);

} else {

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

}

// 通过名称查询歌曲信息

song = null;

song = mainPlayList.searchSongByName("小燕子");

if (song != null) {

System.out.println("根据name查询的歌曲信息" + song);

} else {

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

}

// 修改歌曲信息

Song songUpdate = new Song("s005", "蜗牛与黄鹂鸟", "小太阳");

mainPlayList.updateSong("s003", songUpdate);

mainPlayList.displayAllSong();

// 删除歌曲信息

mainPlayList.deleteSong("s005");

mainPlayList.displayAllSong();

}


// 测试播放列表类

public void testPlayListCollection() {

Song song1 = new Song("s001", "两只老虎", "小太阳");

Song song2 = new Song("s002", "小燕子", "风车");

Song song3 = new Song("s003", "茉莉花", "彩虹");

// 创建主播放列表

PlayList mainPlayList = new PlayList("主播放列表");

// 将歌曲添加到主播放列表

mainPlayList.addToPlayList(song1);

mainPlayList.addToPlayList(song2);

mainPlayList.addToPlayList(song3);

// 定义一个新的播放列表,从主播放列表中添加歌曲进行来

PlayList favouritePlayList = new PlayList("最喜欢的歌曲");

favouritePlayList.addToPlayList(mainPlayList.getMusicList().get(0));

favouritePlayList.addToPlayList(mainPlayList.getMusicList().get(1));

favouritePlayList.displayAllSong();

// 将两个播放列表添加到播放列表集合中

PlayListCollection plc = new PlayListCollection();

plc.addPlayList(mainPlayList);

plc.addPlayList(favouritePlayList);

plc.displayListName();

// 根据播放列表名字查询播放列表信息,并显示所有歌曲

PlayList playList = plc.searchPlayListByName("最喜欢的歌曲");

playList.displayAllSong();

// 删除播放列表信息

System.out.print("删除前:");

plc.displayListName();

System.out.print("删除后:");

plc.deletePlayList(favouritePlayList);

plc.displayListName();

}


// 主菜单

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 void test() {

TestDemo td = new TestDemo();

Scanner sc = new Scanner(System.in);

int input = 0, input1 = 0, input2 = 0;

// 创建一个播放列表容器(播放器)

PlayListCollection plc = new PlayListCollection();

// 创建主播放列表

PlayList mainPlayList = new PlayList("主播放列表");

PlayList favoritePlayList = null;

// 将主播放列表添加到播放器

plc.addPlayList(mainPlayList);

while (true) {

td.mainMenu();

System.out.println("请输入对应数字进行操作:");

input = sc.nextInt();

if (input == 0) {

break;

}

switch (input) {

case 1:

// 播放列表管理

while (true) {

td.playListMenu();

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

input1 = sc.nextInt();

if (input1 == 9) {

break;

}

switch (input1) {

case 1:

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

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

int count = sc.nextInt();

for (int i = 1; i <= count; i++) {

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

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

String strId = sc.next();

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

String strName = sc.next();

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

String strSinger = sc.next();

// 创建Song类对象

Song song = new Song(strId, strName, strSinger);

mainPlayList.addToPlayList(song);

}

break;

case 2:

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

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

String sName = sc.next();

// 根据名称判判断播放列表是否存在播放器中

favoritePlayList = plc.searchPlayListByName(sName);

if (favoritePlayList == null) {

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

} else {

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

int count1 = sc.nextInt();

for (int i = 1; i <= count1; i++) {

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

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

String strId = sc.next();

// 首先判断该id的歌曲是否在主播放列表存在

Song song = mainPlayList.searchSongById(strId);

if (song == null) {

// 如果歌曲不存在,则创建新的添加,并且添加到主播放列表

System.out.println("该歌曲在主播放列表不存在,请继续输入歌曲的其他信息");

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

String strName = sc.next();

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

String strSinger = sc.next();

// 创建一个Song类的对象

song = new Song(strId, strName, strSinger);

// 分别将歌曲添加到普通播放列表和主播放列表

favoritePlayList.addToPlayList(song);

mainPlayList.addToPlayList(song);

} else {

// 如果歌曲存在于主播放列表,则直接添加到现在的播放列表

favoritePlayList.addToPlayList(song);

}

}

// 显示播放列表中的歌曲信息

System.out.println("主播放列表:");

mainPlayList.displayAllSong();

System.out.println("普通播放列表");

favoritePlayList.displayAllSong();

}


break;

case 3:

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

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

String strPlayListName1 = sc.next();

// 查询播放列表是否存在

PlayList pl = plc.searchPlayListByName(strPlayListName1);

if (pl == null) {

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

break;

} else {

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

String strId1 = sc.next();

Song s = pl.searchSongById(strId1);

if (s == null) {

System.out.println("该歌曲在播放列表" + strPlayListName1 + "不存在!");

} else {

System.out.println("该歌曲信息为:");

System.out.println(s);

}

}

break;

case 4:

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

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

String strPlayListName2 = sc.next();

// 查询播放列表是否存在

PlayList pl1 = plc.searchPlayListByName(strPlayListName2);

if (pl1 == null) {

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

break;

} else {

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

String strName1 = sc.next();

Song s = pl1.searchSongByName(strName1);

if (s == null) {

System.out.println("该歌曲在播放列表" + strPlayListName2 + "不存在!");

} else {

System.out.println("该歌曲信息为:");

System.out.println(s);


}

}

break;

case 5:

System.out.println("修改播放列表中的歌曲");

System.out.println("请输入要修改歌曲的播放列表名称:");

String strPlayListName = sc.next();

// 查询播放列表是否存在

PlayList pl2 = plc.searchPlayListByName(strPlayListName);

if (pl2 == null) {

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

break;

} else {

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

String strId = sc.next();

Song s = pl2.searchSongById(strId);

if (s == null) {

System.out.println("该歌曲在播放列表" + strPlayListName + "不存在!");

} else {

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

System.out.println("请输入对应的数字进行修改");

System.out.println("1--修改歌曲Id");

System.out.println("2--修改歌曲名称");

System.out.println("3--修改歌曲演奏者");

System.out.println("0--退出修改");

while (true) {

int input3 = sc.nextInt();

if (input3 == 0) {

break;

}

switch (input3) {

case 1:

System.out.print("修改歌曲Id为:");

String songId = sc.next();

s.setId(strId);

break;

case 2:

System.out.print("修改歌曲名称为:");

String songName = sc.next();

s.setName(songName);

break;

case 3:

System.out.print("修改歌曲演奏者为:");

String songSinger = sc.next();

s.setSinger(songSinger);

break;

default:

System.out.println("您输入数字的有误,请重新输入!");

}

System.out.println("请继续修改按数字提示修改,否则按0退出修改!");

}

System.out.println("修改后" + s);

}

}

break;

case 6:

System.out.println("删除播放列表中的歌曲");

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

String strPlayListName3 = sc.next();

// 查询播放列表是否存在

PlayList pl3 = plc.searchPlayListByName(strPlayListName3);

if (pl3 == null) {

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

} else {

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

String strId = sc.next();

pl3.deleteSong(strId);

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

}

break;

case 7:

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

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

String strPlayListName4 = sc.next();

PlayList pl4 = plc.searchPlayListByName(strPlayListName4);

if (pl4 == null) {

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

} else {

pl4.displayAllSong();

}

break;

case 8:

System.out.println("导出歌单!");

System.out.println("请输入需要导出的歌单名称:");

while (true) {

String strplayListName5 = sc.next();

PlayList pl5 = plc.searchPlayListByName(strplayListName5);

if (pl5 == null) {

System.out.println("该歌单不存在,请重新输入");

continue;

} else {

pl5.displayAllSong();

// 创建song文件

File file = new File("song.txt");

if (!file.exists()) {

try {

file.createNewFile();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

try {

FileOutputStream fos = new FileOutputStream("song.txt");

ObjectOutputStream oos = new ObjectOutputStream(fos);

FileInputStream fis = new FileInputStream("song.txt");

ObjectInputStream ois = new ObjectInputStream(fis);

// 用歌单中的歌曲写入song.txt

for (Song s : pl5.getMusicList()) {

oos.writeObject(s);

}

//读取歌单

try {

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

Song s=(Song)ois.readObject();

System.out.println(s);

}

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//关闭释放资源

ois.close();

fis.close();

oos.close();

fos.close();

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

break;

default:

System.out.println("该歌曲没有对应的操作!");

break;

}

}


case 2:

// 播放器管理

while (true) {

td.playerMenu();

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

input2 = sc.nextInt();

if (input2 == 9) {

break;

}

switch (input2) {

case 1:

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

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

String playerName = sc.next();

// 创建一个新的播放列表对象

favoritePlayList = new PlayList(playerName);

// 将播放列表添加到播放器Map

plc.addPlayList(favoritePlayList);

break;

case 2:

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

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

String strPlayListName = sc.next();

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

System.out.println("主播放列表不能删除!");

break;

}

// 查询播放列表是否存在

PlayList playList1 = plc.searchPlayListByName(strPlayListName);

if (playList1 == null) {

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

} else {

// 存在则删除

plc.deletePlayList(playList1);

}

break;

case 3:

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

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

String strPlayList1 = sc.next();

PlayList playList2 = plc.searchPlayListByName(strPlayList1);

if (playList2 == null) {

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

} else {

// 显示该播放列表名称及其中的所有歌曲

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

System.out.println("该播放列表的名称为:" + strPlayList1);

playList2.displayAllSong();

}

break;

case 4:

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

System.out.println("所有播放列表的名称为:");

plc.displayListName();

break;

default:

System.out.println("该指令没有对应操作!");

break;

}

}

break;

default:

System.out.println("该数字没有对应操作!");

break;

}

}

}


public static void main(String[] args) {

TestDemo td = new TestDemo();

td.test();

}


}

-----------------------------------------------

package player;


import java.util.ArrayList;

import java.util.List;


public class PlayList {

// 播放列表的名称

private String playListName;

// 播放列表的歌曲集合

private List<Song> musicList;


/**

* 构造方法

* @param playListName 播放列表的名称

*/

public PlayList(String playListName) {

this.playListName = playListName;

musicList = new ArrayList<Song>();

}


/**

* 奖歌曲添加到播放列表

* @param song 要添加的歌曲

*/

public void addToPlayList(Song song) {

// 判断播放列表中歌曲是否存在

boolean flag = false;

// 用for循环判断列表中是否存在

for (Song song1 : musicList) {

if (song1.equals(song)) {

flag = true;

break;

}

}

if (flag) {

System.out.println("该歌曲已经存在于播放列表中,添加失败!");

} else {

musicList.add(song);

}

}


/**

* 通过歌曲id查询

* @param id 歌曲查到

* @return 查询到的歌曲信息

*/

public Song searchSongById(String id) {

Song song = null;

// Id是唯一的

for (Song song1 : musicList) {

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

// 如果相等就找到了

song = song1;

break;

}

}

return song;

}

/**

* 修改播放列表中的歌曲信息

* @param id 要修改的歌曲id

* @param song 新的歌曲信息

*/

public void updateSong(String id,Song song) {

//根据id查询相关的歌曲信息然后进行修改

Song song1=searchSongById(id);

if(song1==null) {

System.out.println("没有找到id为"+id+"对应的歌曲信息!");

}else {

//先移除原来的信息,然后在重新添加

musicList.remove(song1);

musicList.add(song);

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

}

}

/**

* 删除播放列表中指定的歌曲信息

* @param id 歌曲id

*/

    public void deleteSong(String id) {

    Song song=searchSongById(id);

    if(song!=null) {

    musicList.remove(song);

    }else {

    System.out.println("没有找到id为"+id+"歌曲信息!");

    }

    }

    //生成geter和seter方法

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 name 歌曲名称

* @return song

*/

public Song searchSongByName(String name) {

Song song = null;

// Id是唯一的

for (Song song1 : musicList) {

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

song = song1;

break;

}

}

return song;

}


/**

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

*/

public void displayAllSong() {

System.out.println("播放列表中的所有歌曲为:");

for (Song song : musicList) {

System.out.println(song);

}

}


}

------------------------------------------------------------

package player;


import java.util.HashMap;

import java.util.Map;

import java.util.Set;


/**

 * 播放列表集合

 * 

 * @author 86191

 *

 */

public class PlayListCollection {

// 存放播放列表集合

Map<String, PlayList> playListMap;


// 创建构造方法

public PlayListCollection() {

playListMap = new HashMap<String, PlayList>();

}


/**

* 向播放列表集合(播放器)添加播放列表

* @param playList

*/

public void addPlayList(PlayList playList) {

playListMap.put(playList.getPlayListName(), playList);

}


/**

* 删除播放列表

* @param playList 要删除的播放列表对象

*/

public void deletePlayList(PlayList playList) {

playListMap.remove(playList.getPlayListName());

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

}


/**

* 查询播放列表

* @param playListName 播放列表名称

* @return 播放列表

*/

public PlayList searchPlayListByName(String playListName) {

PlayList playList = null;

// 建立集合set用于储存key值

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

for (String s : playListSet) {

if (s.equals(playListName)) {

playList = playListMap.get(s);

break;

}

}

return playList;

}


/**

* 显示所有播放列表的名称

*/

public void displayListName() {

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

System.out.println("播放列表名称为:");

for (String s : playListSet) {

System.out.println(s);

}

}


// 创建geter和seter

public Map<String, PlayList> getPlayListMap() {

return playListMap;

}


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

this.playListMap = playListMap;

}


}

------------------------------------------------------------------

package player;


/**

 * 歌曲类

 * 

 * @author 86191

 */


public class Song {

// Song类的属性:id、name、singer

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;

}


// 创建geter和seter

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和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) {

// 判断对象是否相等,相等直接返回true

if (this == obj) {

// this表示当前对象

return true;

}

// this!=obj

if (obj.getClass() == Song.class) {

// 将obj对象强制转换为Song类

Song song = (Song) obj;

// 如果对象相等,判断id、和name、singer是否相同

return (song.getId().equals(id) && song.getName().equals(name) && song.getSinger().equals(singer));

}

return false;

}

  

// 重写toString方法

@Override

public String toString() {

return "歌曲信息:id为" + this.id + ",歌曲名称为:" + this.name + ",演奏者为:" + this.singer;

}

//写代码时写完一个类要测试一个类


}

http://img.mukewang.com/climg/5f2d6cb7091aaa0813520203.jpghttp://img.mukewang.com/climg/5f2d6cc609c44e4b11680252.jpg

写回答

1回答

好帮手慕阿园

2020-08-08

同学你好

1,因为同学的while(true)没有结束循环,while(true)代表死循环,不结束后面的语句就执行不到,所以报错了,while(true)里面加个break语句,结束循环就不会报错了

2,导出歌单时,存储的对象所属的类需要实现Serializable接口,同学没有实现,所以报未序列化异常

http://img.mukewang.com/climg/5f2e23d009a5859e04720109.jpg

祝学习愉快


0

0 学习 · 11489 问题

查看课程