老师,导出来是是乱码怎么解决? +作业打卡

老师,导出来是是乱码怎么解决? +作业打卡

具体遇到的问题

报错信息的截图

相关课程内容截图

尝试过的解决思路和结果

粘贴全部相关代码,切记添加代码注释(请勿截图)

package com.imooc.player;

import java.io.Serializable;
import java.util.Comparator;

public class Song implements Comparator<Song>,Serializable{
	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;
	}
	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) {
		//判断对象是否相等,相等则直接返回true
		if(this==obj)
			return true;
		if(obj.getClass()==Song.class) {
			Song song=(Song)obj;
			return (song.getId().equals(id)&&song.getName().equals(name)&&song.getSinger().equals(singer));
			
		}
			return false;
	}
	@Override
	public String toString() {
		return "歌曲信息 [编号:" + id + ", 歌名:" + name + ", 演唱者:" + singer + "]";
	}
	@Override
	public int compare(Song o1, Song o2) {
		// TODO Auto-generated method stub
		String Id1=o1.getId();
		String Id2=o1.getId();
		int n=Id1.compareTo(Id2);
		
		return n;
	}
	
	

}
在这里输入代码

package com.imooc.player;

import java.util.ArrayList;
import java.util.List;

public class PlayList {
private String playListName;
private List musicList;

/**
 * 构造方法
 * @param 播放列表名称
 */
public PlayList(String playListName) {
	this.playListName = playListName;
	musicList = new ArrayList<Song>();

}

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 void addToPlayList(Song song) {
//
// for (Song s : musicList) {
// if (s.equals(song)) {
// System.out.println(“歌曲”+song+“已经存在,添加失败”);
// } else
// musicList.add(song);
// }
//
// }

public void addToPlayList(Song song) {
	boolean flag = false;
	for (Song s : musicList) {
		if (s.equals(song)) {
			flag = true;
			break;
		}
	}
	if (flag) {
		System.out.println("歌曲" + song.getId() + "已经存在,添加失败");
	} else {
		musicList.add(song);
	}
}

// 显示播放器所有歌曲
public void displayAllSong() {
	for (Song s : musicList) {
		System.out.println(s);
	}
}

// 通过ID查询歌曲
/**
 * 
 * @param id 歌曲id
 * @return 查询到的歌曲信息
 */
public Song searchSongById(String id) {
	Song song = null;
	for (Song s : musicList)
		if (s.getId().equals(id)) {// 通过对象的get方法调用私有属性
			song = s;
			break;
		}

// else {
// System.out.println(“该ID歌曲不存在”);
// } 这里不能有else,否则再for循环的时候会break以后会执行else以外的内容
return song;
// System.out.println(song); 这里不能有打印输出语句, 错误为无法执行该代码

}

// 通过名称查询歌曲
public Song searchSongByName(String name) {
	Song song = null;
	for (Song s : musicList)
		if (s.getName().equals(name)) {
			song = s;
			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+"对应的歌曲");
	}else {
	//先移除歌曲   不能通过简单的赋值运算直接替换
	musicList.remove(song1);
	//添加歌曲
		musicList.add(song);
	}

//
// boolean flag=false;
// for (Song s : musicList) {
// if (s.getId().equals(id)) {
// flag = true;
// musicList.remove(s);
// musicList.add(song);
// break;
// }
//
// }if(flag) {
// System.out.println(“已经替换”+song);
// }else {
// System.out.println(“没有找到歌曲”);
// }
}

//删除歌曲
/**
 * 
 * @param id 要替换歌曲的ID
 */
public void deleteSong(String id) {
	Song song1=searchSongById(id);
	if(song1==null) {
		System.out.println("没有找到"+id+"的歌曲");
	}else {
	musicList.remove(song1);
	}
}

public void sortByName() {
	
	
}

}

package com.imooc.player;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*

  • @author 播放列表集合

*/

public class PlayListCollection {
Map <String,PlayList> playListMap;//存放播放列表集合
//构造方法
public PlayListCollection(){
playListMap=new HashMap<String,PlayList>();
}

/**
 * 想播放列表集合(播放器)添加播放列表
 * @param 要添加的播放列表
 */
public void addPlayList(PlayList playList) {
	playListMap.put(playList.getPlayListName(), playList);
	
}

/**
 * 
 * @param 要删除的播放列表对象
 */
public void deletePlayList(PlayList playList) {
	playListMap.remove(playList.getPlayListName(), playList);
	System.out.println("删除成功!");
}

/**
 * 通过播放列表名称查询
 * @param PlayListName
 * @return 播放列表
 */
public PlayList searchPlayListByNmae(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 void displayListName() {
	Set<String> playListSet=playListMap.keySet();
	System.out.println("播放列表名称为:");
	for(String s:playListSet) {
		System.out.println(s);
	}
	
}




public Map<String, PlayList> getPlayListMap() {
	return playListMap;
}

public void setPlayListMap(Map<String, PlayList> playListMap) {
	this.playListMap = playListMap;
}

}

package com.imooc.player;

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.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Test {
// 主菜单
public void mainMenu() {
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("        10--导出歌单 ");
	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("***************************************");
}

// 主流程 whilw 和switch结合进行对应的相应
public void test() {
	Test td = new Test();
	Scanner sc = new Scanner(System.in);
	int input = 0, input1 = 0, input2 = 0;
	//创建一个播放列表容器(播放器)
	PlayListCollection plc=new PlayListCollection();
	//创建主播放列表
	PlayList mainPlayList=new PlayList("主播放列表");
	PlayList favPlayList=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=new Song(strId,strName,strSinger);
						mainPlayList.addToPlayList(song);
						//mainPlayList.displayAllSong();
						
					}
					break;
				case 2:
					System.out.println("将歌曲添加到普通播放列表");
					System.out.println("请输入要添加的播放列表名称");
					String sName=sc.next();
					//根据名称判断播放列表是否再播放器中存在
					favPlayList=plc.searchPlayListByNmae(sName);
					if(favPlayList==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 song1=new Song(strId,strName,strSinger);
								mainPlayList.addToPlayList(song1);
								favPlayList.addToPlayList(song1);
								
							}else {
								//如果歌曲存在于主播放列表,则直接添加到现在的播放列表
								favPlayList.addToPlayList(song);
							}
						}
						//显示播放列表中歌曲信息
						System.out.println("主播放列表");
						mainPlayList.displayAllSong();
						System.out.println("普通播放列表");
						favPlayList.displayAllSong();
					}
					break;
				case 3:
					System.out.println("通过ID查询播放列表中的歌曲");
					System.out.println("请输入要查询的播放列表名称:");
					String strPlayListName1=sc.next();
					//查询播放列表是否存在
					PlayList pl=plc.searchPlayListByNmae(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();
					//查询播放列表是否存在
					PlayList pl1=plc.searchPlayListByNmae(strPlayListName);
					if(pl1==null) {
						System.out.println("该播放列表不存在");break;
					}else {
						System.out.println("请输入要查询的歌曲名称:");
						String strName=sc.next();
						Song s=pl1.searchSongByName(strName);
						if(s==null) {
							System.out.println("该歌曲不存在!");
						}else {
							System.out.println("该歌曲信息为:");
							System.out.println(s);
						}
					}
					
					break;
				case 5:
					System.out.println("修改播放列表中的歌曲 ");
					//修改主播放列表歌曲
					System.out.println("请输入要修改的歌曲Id");
					String strId=sc.next();
					Song song=mainPlayList.searchSongById(strId);
					if(song==null) {
						System.out.println("输入的歌曲ID不存在,请重新输入");
					}else {
						System.out.println("请输入要修改的歌曲名");
						String strName=sc.next();
						System.out.println("请输入歌曲演唱者");
						String strSinger=sc.next();
						Song song1=new Song(strId,strName,strSinger);
						mainPlayList.updateSong(strId, song1);
						System.out.println("主播放列表修改成功");
					}
					//修改普通播放列表歌曲+主播放列表
					System.out.println("请输入播放列表名称");
					String strPlName=sc.next();
					PlayList pl2=plc.searchPlayListByNmae(strPlName);
					if(pl2==null) {
						System.out.println("播放列表不存在");
					}else {
						System.out.println("请输入要修改的歌曲Id");
						String strId1=sc.next();
						Song song2=pl2.searchSongById(strId1);
						if(song2==null) {
							System.out.println("输入的歌曲ID不存在,请重新输入");
						}else {
							System.out.println("请输入要修改的歌曲名");
							String strName=sc.next();
							System.out.println("请输入歌曲演唱者");
							String strSinger=sc.next();
							Song song3=new Song(strId1,strName,strSinger);
							pl2.updateSong(strId1, song3);
							System.out.println(pl2.getPlayListName()+"歌曲修改成功");
							mainPlayList.updateSong(strId1, song3);
							System.out.println("主播放列表修改成功");
						}
					}
					
					
					
					break;
				case 6:
					System.out.println("删除播放列表中的歌曲 ");
					System.out.println("请输入要删除的播放列表:");
					String strpl=sc.next();
					PlayList pl3=plc.searchPlayListByNmae(strpl);
					if(pl3==null) {
						System.out.println("该播放列表不存在");
					}else {
						System.out.println("请输入要删除的歌曲Id");
						String strId1=sc.next();
						Song song1=pl3.searchSongById(strId1);
						if(song1==null) {
							System.out.println("该歌曲存在");
						}else {
							pl3.deleteSong(strId1);
							System.out.println("删除"+strId1+"成功!");
						}
					}
					
					break;
				case 7:
					System.out.println("显示播放列表中的歌曲 ");
					System.out.println("请输入要删除的播放列表:");
					String strp2=sc.next();
					PlayList pl4=plc.searchPlayListByNmae(strp2);
					if(pl4==null) {
						System.out.println("该播放列表不存在");
					}else {
						pl4.displayAllSong();
					}
					break;
				case 8 :
					System.out.println("对主播放列表歌单进行排序");
					List<Song> SongList=mainPlayList.getMusicList();
					Collections.sort(SongList, new Song());
				case 10 :
					System.out.println("输出歌单");
					System.out.println("请输入歌单名称:");
					String strPlayListName2=sc.next();
					PlayList pl5=plc.searchPlayListByNmae(strPlayListName2);
					if(pl5==null) {
						System.out.println("该歌单不存在");
					}else {
					try {
						FileOutputStream fos=new FileOutputStream(strPlayListName2+".txt");
						ObjectOutputStream oos=new ObjectOutputStream(fos);
						for(Song song1:pl5.getMusicList()) {
							oos.writeObject(song1);
						}
						oos.flush();
						oos.close();
						fos.close();
						
						System.out.println("导出成功");
						
					} catch (FileNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					
					}
					break;
				default:
					System.out.println("该歌曲没有对应的操作");
					break;
				}
			}
			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();
					//创建一个新的播放列表对象
					favPlayList=new PlayList(playerName);
					//将播放列表添加到播放器Map;
					plc.addPlayList(favPlayList);
					
					break;
				case 2:
					System.out.println("删除播放列表");
					System.out.println("请输入要删除的播放列表名称");
					String PlayListName=sc.next();
					if(PlayListName.equals(mainPlayList.getPlayListName())){
						System.out.println("主播放列表不能被删除");
						break;
					}
					//查询播放列表是否存在
					PlayList playList1=plc.searchPlayListByNmae(PlayListName);
					if(playList1==null) {
						System.out.println("播放列表"+PlayListName+"不存在!");
					}else {
						//存在则删除
						plc.deletePlayList(playList1);
					}
					break;
				case 3:
					System.out.println("通过名字查询播放列表 ");
					System.out.println("请输入要查询的播放列表名称:");
					String strPlayList1=sc.next();
					PlayList playList2=plc.searchPlayListByNmae(strPlayList1);
					if(playList2==null) {
						System.out.println("该播放列表不存在");
					}else {
						//显示该播放列表名称及其中的所有歌曲
						System.out.println("该播放列表存在!");
						System.out.println("该播放列表名称为:"+playList2.getPlayListName());
						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) {
	Test td = new Test();
	td.test();
	
}

}

正在回答

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

1回答

同学你好,1. 同学是否是使用的是writeObject()方法,writeObject()是将对象的二进制编码输出到文件中,不是输出文件内容,所以显示出来的就是乱码。我们可以用ObjectInputStream的readObject()方法读取文件中数据。

2. 已完成练习,棒棒哒!继续加油!

问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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