返回上一頁後, 再進入播放器管理, 原本輸入的播放器不見了
import java.util.InputMismatchException; import java.util.Scanner; //測試類 public class TestDemo { //測試歌曲類 public void testSong(){ } //測試播放列表類 public void testPlayList(){ Scanner input = new Scanner(System.in); playListMenu(); int num = input.nextInt(); PlayList playList = new PlayList(); Song song= new Song(); switch(num){ case 1: playList.addToPlayList(song); break; case 2: playList.addToNormalPlayList(song); break; case 9: test(); break; } } //測試播放器類 public void testPlayListCollection(){ Scanner input = new Scanner(System.in); PlayListCollection playerList = new PlayListCollection(); PlayList playList= new PlayList(); while(true){ playerMenu(); int num = input.nextInt(); try{ switch(num){ case 1: playerList.addPlayList(playList); break; case 2: playerList.deletePlayList(null); break; case 3: playerList.serachPlayListByName(null); break; case 4: playerList.displayPlayListName(); break; case 9: test(); break; default: System.out.println("輸入錯誤, 請重新輸入數字 1-4進行操作"); break; } }catch(InputMismatchException e){ //e.printStackTrace(); System.out.println("輸入格式錯誤, 請輸入數字"); } } } //主菜單 public void mainMenu(){ System.out.println("************************************"); System.out.println("\t**主菜單**"); System.out.println("\t1--播放列表管理"); System.out.println("\t2--播放器管理"); System.out.println("\t0--退出"); System.out.println("************************************"); } //播放列表管理菜單 public void playListMenu(){ System.out.println("************************************"); System.out.println("\t1--將歌曲添加到主播放列表"); System.out.println("\t2--將歌曲添加到普通播放列表"); System.out.println("\t3--通過歌曲id查詢播放列表中的歌曲"); System.out.println("\t4--通過歌曲名稱查詢播放列表中的歌曲"); System.out.println("\t5--修改播放列表中的歌曲"); System.out.println("\t6--刪除播放列表中的歌曲"); System.out.println("\t7--顯示播放列表中的所有歌曲"); System.out.println("\t8--導出歌單"); System.out.println("\t9--返回上一級菜單"); System.out.println("************************************"); System.out.println("請輸入對應數字對播放列表進行管理: "); } //播放器菜單 public void playerMenu(){ System.out.println("************************************"); System.out.println("\t**播放器管理**"); System.out.println("\t1--向播放器添加播放列表"); System.out.println("\t2--從播放器刪除播放列表"); System.out.println("\t3--通過名字查詢播放列表信息"); System.out.println("\t4--顯示所有播放列表名稱"); System.out.println("\t9--返回上一級菜單"); System.out.println("************************************"); System.out.println("請輸入對應數字對播放器進行管理: "); } //主流程實現 public void test(){ Scanner input = new Scanner(System.in); mainMenu(); System.out.println("請輸入對應數字進行操作: "); int num = input.nextInt(); while(true){ switch(num){ case 1: testPlayList(); break; case 2: testPlayListCollection(); break; case 0: System.out.println("成功退出"); break; }if(num==0) break; } } public static void main(String[] args){ TestDemo testDemo = new TestDemo(); testDemo.test(); } }
一開始在主菜單按2 進入播放器管理, 然後接1 新增播放器, 按4 查詢 這時候還在的, 然後接9返回主菜單, 再按2進入播放器管理, 按4查詢的時候, 就不見了.
另外在方法testPlayListCollection(); 中的try catch 語句有什麼問題? 輸入非數字時 沒有彈出設定好的語句, 只彈出錯誤的提示.
正在回答
1、一開始在主菜單按2 進入播放器管理, 然後接1 新增播放器, 按4 查詢 這時候還在的, 然後接9返回主菜單, 再按2進入播放器管理, 按4查詢的時候, 就不見了.针对这个问题的解答
因为在testPlayListCollection()方法中,有这么一条语句:
PlayListCollection playerList = new PlayListCollection();
每次调用testPlayListCollection()方法都会重新建一个新的PlayListCollection的对象,所以里面的内容就都没有了
解决办法:把PlayListCollection playerList = new PlayListCollection();这条语句放到TestDemo类成员变量的位置,这样整个程序就只有一个播放器对象
2、另外在方法testPlayListCollection(); 中的try catch 語句有什麼問題? 輸入非數字時 沒有彈出設定好的語句, 只彈出錯誤的提示.
针对这个问题的解答
try语句应该把这句话包括进来int num = input.nextInt();因为这句话才可能发生异常,另外在catch语句中加一句话input.next();用于接收输错的字符串,否则程序会一直循环执行下去
3、另外想問一下 我添加兩首歌曲後, 第二首覆蓋了第一首的信息.针对这个问题的解答
因为你添加到musicList中的都是同一个Song类的对象,只是修改了song的属性值而已。
修改建议,既然添加的方法有参数,所以把从键盘接收数据的代码都写到TestDemo类中,调用方法前从键盘接收数据,然后创建Song的对象,再调用方法,那么方法体中只需要向musicList添加就可以了
另外,PlayList类中不用定义两个List,只有一个就可以了,在使用时,也就是在TestDemo类中再去定义两个PlayList的对象分别表示主播放列表和普通播放列表
程序主体架子已经搭建起来了,做的还是不错的,这道题比较综合,能完全做出来还是能代表Java学的不错的,所以继续加油,有问题在问答区提问,祝学习愉快!
public class Song { //屬性 歌曲id, 歌曲名, 演唱者 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; } // getter 和setter 方法 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) { if (this == obj) return true; if(obj.getClass()==Song.class){ Song song = (Song) obj; return (song.getName().equals(name)) && (song.getId().equals(id)) &&(song.getSinger().equals(singer)); } return false; } //toString方法 @Override public String toString() { return "歌曲信息 : id為" + id + ", 歌曲名稱為 : " + name + ", 演唱者為 : " + singer; } } 另外想問一下 我添加兩首歌曲後, 第二首覆蓋了第一首的信息. 做了一整天, 才做這麼一點, 有點失望
import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.Set; //播放器類 public class PlayListCollection { Song song; //Map Map<String, PlayList> playListMap = new HashMap<String, PlayList>(); Scanner input = new Scanner(System.in); //無參構造方法 public PlayListCollection(){ } //帶參構造方法 public PlayListCollection(Map<String, PlayList> playListMap) { this.playListMap = playListMap; } //setter 和getter 方法 public Map<String, PlayList> getPlayListMap() { return playListMap; } public void setPlayListMap(Map<String, PlayList> playListMap) { this.playListMap = playListMap; } //添加播放器列表 public void addPlayList(PlayList playList){ System.out.println("向播放器添加播放列表"); System.out.println("輸入要添加的播放列表名稱: "); String playerInfor = input.next(); playList.setPlayListName(playerInfor); if(!playListMap.containsKey(playList.getPlayListName())){ playListMap.put(playerInfor, playList); }else{ System.out.println("列表名稱不能重覆, 請重新輸入"); } } //刪除播放列表 public void deletePlayList(PlayList playList){ System.out.println("從播放器刪除播放列表"); displayPlayListName(); System.out.println("輸入要刪除的播放列表"); String playList1 = input.next(); if(playListMap.containsKey(playList1)){ playListMap.remove(playList1); System.out.println("刪除成功"); }else{ System.out.println("該播放列表不存在!"); } } //通過名字查詢 public PlayList serachPlayListByName(String playListName){ System.out.println("通過名字查詢播放列表信息"); System.out.println("請輸入要查詢的播放列表名稱: "); playListName = input.next(); if(playListMap.containsKey(playListName)){ System.out.println("該播放列表存在!"); System.out.println("該播放列表的名稱為: " + playListName); }else{ System.out.println("該播放列表不存在!"); } return null; } //顯示所有播放列表名稱 public void displayPlayListName(){ System.out.println("顯示所有播放列表名稱"); System.out.println("播放列表名稱為:"); /*Iterator<PlayList> it=playListMap.values().iterator(); while(it.hasNext()){ System.out.println(it.next().getPlayListName());*/ Set<Entry<String, PlayList>> mapSet=playListMap.entrySet(); for(Entry<String, PlayList> mapSet1:mapSet){ System.out.println(mapSet1.getKey()); //System.out.println(mapSet1.getValue()); } } } import java.util.ArrayList; import java.util.List; import java.util.Scanner; //播放列表類 public class PlayList { Scanner input = new Scanner(System.in); //屬性 播放列表名稱 private String playListName; //創建歌曲類的對象 Song song; // PlayListCollection plc; //歌曲集合 List<Song> musicList = new ArrayList<Song>(); // List<Song> musicList1 = new ArrayList<Song>(); //無參構造方法 public PlayList(){ } //帶參構造方法 public PlayList(String playListName, List<Song> musicList) { this.setPlayListName(playListName); this.setMusicList(musicList); } //getter 和 setter方法 public String getPlayListName() { return playListName; } public void setPlayListName(String playListName) { this.playListName = playListName; } public List<Song> getMusicList() { return musicList; } public void setMusicList(List musicList) { this.musicList = musicList; } //添加歌曲到播放列表的方法, public void addToPlayList(Song song){ System.out.println("將歌曲添加到主播放列表"); System.out.println("請輸入要添加的歌曲的數量:"); int num = input.nextInt(); for(int i=1; i<=num; i++ ){ System.out.println("請輸入第" + i + "首歌曲: "); System.out.println("請輸入歌曲的id:"); String songInfor = input.next(); song.setId(songInfor); System.out.println("請輸入歌曲的名稱: "); songInfor = input.next(); song.setName(songInfor); System.out.println("請輸入演唱者"); songInfor = input.next(); song.setSinger(songInfor); musicList.add(song); } } public void addToNormalPlayList(Song song){ //plc = new PlayListCollection(); System.out.println("將歌曲添加到普通播放列表"); System.out.println("請輸入要添加的播放列表:"); String input1 = input.next(); if(plc.playListMap.containsKey(input1)){ System.out.println("請輸入要添加的歌曲的數量:"); int num = input.nextInt(); for(int i=1; i<=num; i++ ){ System.out.println("請輸入第" + i + "首歌曲: "); System.out.println("請輸入歌曲的id:"); input1 = input.next(); if(musicList.contains(input1)){ musicList.add(song); }else{ System.out.println("該歌曲在主播放列表不存在, 繼續輸入歌曲的其他信息"); song.setId(input1); System.out.println("請輸入歌曲的名稱: "); input1 = input.next(); song.setName(input1); System.out.println("請輸入演唱者"); input1 = input.next(); song.setSinger(input1); musicList.add(song); } } }else{ System.out.println("該播放列表不在存, 請先將播放列表添加到播放器中!"); } System.out.println(musicList.size()); } //通過id查詢歌曲 public Song searchSongById(String id){ return song; } //通過名稱查詢歌曲 public Song searchSongByName(String n){ return song; } //修改歌曲 public void updateSong(Song song){ } //從播放列表刪除歌曲 public void deleteSong(String id){ } //顯示播放列表中的所有歌曲 public void displayAllSong(){ } //導出歌單 public void exportPlayList(){ } }
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7238 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星