4-7作业问题

4-7作业问题

public void test() throws InputMismatchException {

TestDemo td = new TestDemo();

Scanner sc = new Scanner(System.in);

// 需要3个变量接收数据

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

//创建播放列表容器(也就是播放器)

PlayListCollection plc=new PlayListCollection();

//创建主播放列表

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

//将播放列表添加到播放器中,之后在case语句中再把歌曲添加到播放列表中

plc.addPlayList(mainPlayList);

//定义其他播放列表存储歌曲

PlayList favouritePlayList=null;

while (true) {

td.mainMenu();

System.out.println("请输入对应的数字:");

// try {

input = sc.nextInt();

if (input == 0) {

break;

}

// }catch (InputMismatchException e) {

// System.out.println("输入信息有误,只可输入整数,请重新输入!");

// sc.next();

// }

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=new Song(strId,strName,strSinger);

//把创建好的歌曲添加到主播放列表中

mainPlayList.addToPlayList(song);

//测试

// mainPlayList.displayAllSong();

}

break;

case 2:

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

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

String sName=sc.next();

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

favouritePlayList=plc.searchPlayListByName(sName);

if(favouritePlayList==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);

//把Song类的对象添加到普通播放列表,和主播放列表中

mainPlayList.addToPlayList(song);

favouritePlayList.addToPlayList(song);

  }else {

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

  System.out.println("歌曲信息已存在,无需再次添加!");

  favouritePlayList.addToPlayList(song);

  }

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

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

mainPlayList.displayAllSong();

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

favouritePlayList.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 strPlayListName=sc.next();

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

pl=plc.searchPlayListByName(strPlayListName);

if(pl==null) {

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

}else {

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

String strName=sc.next();

Song s=pl.searchSongByName(strName);

if(s==null) {

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

}else {

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

System.out.println(s);

}

}

break;

case 5:

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

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

String strPlayListName2=sc.next();

//首先查询播放列表名称

pl=plc.searchPlayListByName(strPlayListName2);

//进行判断,如果为空,则无此播放列表,无法删除

if(pl==null) {

System.out.println("该播放列表不存在,无法修改"+strPlayListName2+"列表中的歌曲!");

}else {

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

String strId=sc.next();

Song s=pl.searchSongById(strId);

if(s==null) {

System.out.println(strPlayListName2+"列表中无此id的歌曲,无法修改!");

}else {

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

String strName=sc.next();

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

String strSinger1=sc.next();

Song s1=new Song(strId,strName,strSinger1);

pl.updateSong(strId, s1);

}

}System.out.println("修改后:");

pl.displayAllSong();

break;

case 6:

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

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

String strPlayListName3=sc.next();

//查询要删除的播放列表是否存在

pl=plc.searchPlayListByName(strPlayListName3);

if(pl==null) {

System.out.println("该播放列表不存在,无法删除"+strPlayListName3+"列表中的歌曲!");

}else {

//通过歌曲ID删除此播放列表中的歌曲

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

String strId=sc.next();

Song s=pl.searchSongById(strId);

if(s==null) {

System.out.println("此播放列表中无"+strId+"的歌曲信息");

}else {

pl.deleteSong(strId);

}

}System.out.println("删除后:");

pl.displayAllSong();

break;

case 7:

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

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

String strPlayListName4=sc.next();

pl=plc.searchPlayListByName(strPlayListName4);

if(pl==null) {

    System.out.println("无"+strPlayListName4+"列表的信息!");

}else {

pl.displayAllSong();

}

break;

case 8:

//根据歌单名称将歌单信息导出为“名称.txt"文件到项目的根目录下

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

String strPlayListName5=sc.next();

pl=plc.searchPlayListByName(strPlayListName5);

if(pl==null) {

System.out.println("没有此"+strPlayListName5+"列表的信息!");

}else {

try {

//创建文件输出流,并通过对象输出流传入;

FileOutputStream fos=new FileOutputStream(strPlayListName5+".txt");

ObjectOutputStream oos=new ObjectOutputStream(fos);

//创建文件输入流,并通过对象输入流读取信息

FileInputStream fis=new FileInputStream(strPlayListName5+".txt");

ObjectInputStream ois=new ObjectInputStream(fis);

//将信息写入文件中

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

oos.writeObject(s);

}

oos.writeObject(null);

oos.flush();

//将信息读取出来

Song s=null;

try {

while((s=(Song) ois.readObject())!=null) {

System.out.println(s);

}

fos.close();

oos.close();

fis.close();

ois.close();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} catch (FileNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {

}

}

break;

default:

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

break;

}

}

break;

老师为什么最后,我在控制台读取不到信息啊? 最后的case8 ,读取不出来信息,结果如下:

*******************************

       **主菜单**             

       1--播放列表管理       

       2--播放器管理       

       0--退出       

*******************************

请输入对应的数字:

1

***************************************

       **播放列表管理**       

       1--将歌曲添加到主播放列表       

       2--将歌曲添加到普通播放列表       

       3--通过歌曲id查询播放列表中的歌曲      

       4--通过歌曲名称查询播放列表中的歌曲       

       5--修改播放列表中的歌曲       

       6--删除播放列表中的歌曲       

       7--显示播放列表中的歌曲       

       8--导出歌单       

       9--返回上一级菜单

***************************************

请输入对应的数字:

1

将歌曲添加到主播放列表

请输入要添加歌曲的数量:

2

请输入第1首歌曲:

请输入歌曲的id:

01

请输入歌曲的名称:

d

请输入演唱者:

d

请输入第2首歌曲:

请输入歌曲的id:

02

请输入歌曲的名称:

d

请输入演唱者:

f

***************************************

       **播放列表管理**       

       1--将歌曲添加到主播放列表       

       2--将歌曲添加到普通播放列表       

       3--通过歌曲id查询播放列表中的歌曲      

       4--通过歌曲名称查询播放列表中的歌曲       

       5--修改播放列表中的歌曲       

       6--删除播放列表中的歌曲       

       7--显示播放列表中的歌曲       

       8--导出歌单       

       9--返回上一级菜单

***************************************

请输入对应的数字:

8

请输入需要导出的歌单名称:

主播放器列表

没有此主播放器列表列表的信息!

***************************************

       **播放列表管理**       

       1--将歌曲添加到主播放列表       

       2--将歌曲添加到普通播放列表       

       3--通过歌曲id查询播放列表中的歌曲      

       4--通过歌曲名称查询播放列表中的歌曲       

       5--修改播放列表中的歌曲       

       6--删除播放列表中的歌曲       

       7--显示播放列表中的歌曲       

       8--导出歌单       

       9--返回上一级菜单

***************************************

请输入对应的数字:

8

请输入需要导出的歌单名称:

主播房列表

没有此主播房列表列表的信息!

***************************************

       **播放列表管理**       

       1--将歌曲添加到主播放列表       

       2--将歌曲添加到普通播放列表       

       3--通过歌曲id查询播放列表中的歌曲      

       4--通过歌曲名称查询播放列表中的歌曲       

       5--修改播放列表中的歌曲       

       6--删除播放列表中的歌曲       

       7--显示播放列表中的歌曲       

       8--导出歌单       

       9--返回上一级菜单

***************************************

请输入对应的数字:

8

请输入需要导出的歌单名称:

主播放列表

***************************************

       **播放列表管理**       

       1--将歌曲添加到主播放列表       

       2--将歌曲添加到普通播放列表       

       3--通过歌曲id查询播放列表中的歌曲      

       4--通过歌曲名称查询播放列表中的歌曲       

       5--修改播放列表中的歌曲       

       6--删除播放列表中的歌曲       

       7--显示播放列表中的歌曲       

       8--导出歌单       

       9--返回上一级菜单

***************************************

请输入对应的数字:




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

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

2回答
好帮手慕阿慧 2021-02-03 11:36:13

同学你好,

1、老师这边运行没有问题,可以从输入流中读取不出来信息 。运行效果 如下:

http://img1.sycdn.imooc.com//climg/601a1981090adee811911008.jpg

建议同学使用如下代码,运行试试:

public void test() throws InputMismatchException {
	TestDemo td = new TestDemo();
	Scanner sc = new Scanner(System.in);
	PlayList pl = null;
	int input = 0, input1 = 0, input2 = 0;
	PlayListCollection plc = new PlayListCollection();
	PlayList mainPlayList = new PlayList("主播放列表");
	plc.addPlayList(mainPlayList);
	PlayList favouritePlayList = null;
	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 = new Song(strId, strName, strSinger);
								mainPlayList.addToPlayList(song);
							}
							System.out.println("将歌曲添加到主播放列表add over  mainPlayList:"+mainPlayList.getPlayListName()+"   "+mainPlayList.getMusicList());
							break;
						case 8:
							System.out.println("请输入需要导出的歌单名称:");
							String strPlayListName5=sc.next();
							pl=plc.searchPlayListByName(strPlayListName5);
							if(pl==null) {
								System.out.println("没有此"+strPlayListName5+"列表的信息!");
							}else {
								System.out.println("case 8---------------");
								try {
									FileOutputStream fos=new FileOutputStream(strPlayListName5+".txt");
									ObjectOutputStream oos=new ObjectOutputStream(fos);
									FileInputStream fis=new FileInputStream(strPlayListName5+".txt");
									ObjectInputStream ois=new ObjectInputStream(fis);
									for(Song s:pl.getMusicList()) {
										oos.writeObject(s);
									}
									oos.writeObject(null);
									oos.flush();
									Song s=null;
									try {
										while((s=(Song) ois.readObject())!=null) {
											System.out.println("歌曲--------"+s);
										}
										fos.close();
										oos.close();
										fis.close();
										ois.close();
									} catch (ClassNotFoundException e) {
										e.printStackTrace();
									}
								} catch (FileNotFoundException e) {
									e.printStackTrace();
								}catch(IOException e) {
								}
							}
							break;
						default:
							System.out.println("该歌曲没有对应的操作");
							break;
					}
				}
				break;
		}
	}
}

同学也可以新建一个测试类,运行新的测试类试试。

2、建议同学检查一下addToPlayList()方法是否有误,是否将歌曲添加到了播放列表中。

如下:

http://img1.sycdn.imooc.com//climg/601a1aae092c793105400313.jpg

祝学习愉快~

  • 提问者 rock221 #1

    public void addToPlayList(Song song) {

    // 要排除重复添加的情况

    boolean flag = false;// 判断播放列表中的歌曲是否存在

    for (Song song1 : musicList) {

    if (song1.equals(song)) {

    flag = true;

    break;

    }

    }

    if (flag) {

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

    } else {

    musicList.add(song);

    }

    }

    没问题啊,用老师给的代码结果如下:


    2021-02-03 11:53:23
  • 提问者 rock221 #2


    ***************************************

    请输入对应的数字:

    8

    请输入需要导出的歌单名称:

    主播放列表

    case 8---------------

    ***************************************

       

    2021-02-03 11:54:00
  • 好帮手慕阿慧 回复 提问者 rock221 #3

    同学你好,老师在另一个问答中回复你了,同学可以前去查看 https://class.imooc.com/course/qadetail/276256 

    祝学习愉快~

    2021-02-03 14:12:14
好帮手慕阿慧 2021-02-02 18:31:48

同学你好,同学代码中创建的是主播放列表,如下:

http://img1.sycdn.imooc.com//climg/6019290709fc975505440135.jpg

在导出歌单时,同学输入了"主播放器列表","主播房列表",输错列表名称了,所以会提示没有此主播放器列表列表的信息!

当输入"主播放列表"时,列表名称正确,但是读不出信息,这可能是没有将歌曲添加到主播放列表中,同学可以检查一下代码,看一下哪里是不是写错了。

如果问题没有解决,建议同学贴一下完整代码,方便老师检查。

祝学习愉快~

  • 提问者 rock221 #1
    名称正确,还是读不出信息,老师可以帮忙看看哪里出错了吗
    2021-02-02 18:32:48
  • 好帮手慕阿慧 回复 提问者 rock221 #2

    同学你好,老师这边测试没有问题,如下:

    http://img1.sycdn.imooc.com//climg/60192f5f09431c6c11270737.jpg

    运行结果如下:

    http://img1.sycdn.imooc.com//climg/60192fc009ffc9f411210927.jpg

    建议同学在代码中添加输出语句,再运行试试。

    祝学习愉快~

    2021-02-02 19:01:38
  • 提问者 rock221 回复 好帮手慕阿慧 #3

    题目要求是通过输入输出流啊, 但是我输入流读取不出来信息。 

    2021-02-03 10:59:43
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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