老师,导出来是是乱码怎么解决? +作业打卡
具体遇到的问题
报错信息的截图
相关课程内容截图
尝试过的解决思路和结果
粘贴全部相关代码,切记添加代码注释(请勿截图)
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. 同学是否是使用的是writeObject()方法,writeObject()是将对象的二进制编码输出到文件中,不是输出文件内容,所以显示出来的就是乱码。我们可以用ObjectInputStream的readObject()方法读取文件中数据。
2. 已完成练习,棒棒哒!继续加油!
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星