返回上一頁後, 再進入播放器管理, 原本輸入的播放器不見了

返回上一頁後, 再進入播放器管理, 原本輸入的播放器不見了

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 語句有什麼問題? 輸入非數字時 沒有彈出設定好的語句, 只彈出錯誤的提示.

正在回答

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

5回答

 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学的不错的,所以继续加油,有问题在问答区提问,祝学习愉快!


  • 小張Roy 提问者 #1
    第3個問題, 我將PlayList類的方法 addToPlayList(Song song) 整個寫到TestDemo類中, 只保留了musicList.add(song); 的語句, 是這樣嗎? 原本的寫法, 在TestDemo類中的方法testPlayList()方法中創建了對象song, 然後調用addToPlayList(Song song); 再輸入數據, 導致永遠只是在修改原本的數據? 原本的寫法: 因為我先創建了一個對象song, 然後調用方法, addToPlayList(Song song) 方法中, 參數永遠是原先創建的一個對象song, 方法中有for循環, 所以不管循環多少次, 都只是在原本的一個對象song 上作更新發新增. 修改後的方法: 是先從鍵盤接收 n組數據, 然後將n組數據分配給不同的對象, 再調用方法儲入musicList 新增歌曲是需要 n組數據 對應n個對象, 而播放器是使用一個對象紀錄所有播放器. 這裡我理解主播放器 其實就是全部歌曲. 是這樣去思考嗎? 謝謝!
    2017-04-25 16:08:23
  • 小張Roy 提问者 #2
    謝謝謝謝!
    2017-04-26 09:33:48
  • 好帮手慕珊 回复 提问者 小張Roy #3
    1、第3個問題, 我將PlayList類的方法 addToPlayList(Song song) 整個寫到TestDemo類中, 只保留了musicList.add(song); 的語句, 是這樣嗎? 是这样的,后面说的也对,接收完歌曲数据后,就去new一个对象,然后调用addToPlayList方法去添加歌曲就可以了。在addToPlayList方法中,可以判断一下要添加的歌曲是否存在,如果存在就不添加了,不存在则添加。 2、主播放列表就是所有歌曲的集合,你的理解是对的 3、播放器里面可以包含多个播放列表,除了默认的主播放列表,还可以有多个自己创建的
    2017-04-26 14:07:01
提问者 小張Roy 2017-04-24 18:52:13

另外想問一下 我添加兩首歌曲後, 第二首覆蓋了第一首的信息.

求救啊老師

提问者 小張Roy 2017-04-24 18:51:03
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;
	}

}

另外想問一下 我添加兩首歌曲後, 第二首覆蓋了第一首的信息.
做了一整天, 才做這麼一點, 有點失望
提问者 小張Roy 2017-04-24 18:05:42
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(){
		
	}

}


好帮手慕雪 2017-04-24 18:01:52

你好,为了排查错误请把所有的代码都贴出来。

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

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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