返回上一頁後, 再進入播放器管理, 原本輸入的播放器不見了
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 份
- 解答问题 7235 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星