实例化对象无法调用?

实例化对象无法调用?

我在主方法运行的时候实例化了主播放列表mainPlayList,在播放列表管理的public void playMenu()方法里无法调用实例化的mainPlayList这个对象,这是为什么?

正在回答 回答被采纳积分+1

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

3回答
奇巧巧克力 2017-03-22 16:03:06

你好,请看图中http://img1.sycdn.imooc.com/climg//58d22f170001e96e07810426.jpg你将mainPlayList和myplayer定义在test()方法内部,因此它只能在test()方法内部起作用,如果你想要在你说的地方引用它,建议你将它定义在类里面,它就是全局变量,本类中都可以使用了。如果解决了你的疑惑,请采纳。~祝学习愉快!

  • 提问者 qq_细竹竿_0 #1
    public class TestDemo { // 初始化1:新建一个存放播放列表的map Map<String, PlayList> plistc = new HashMap<String, PlayList>(); // 初始化2:创建主播放列表 PlayList mainPlayList = new PlayList("主播放列表", null); // 初始化3:将主播放列表存入plistc map中 plistc.put(mainPlayList.getPalyListName(), mainPlayList); // 初始化4:通过带参构造函数创建播放器类实例mplayer,参数为map类的plistc PlayListCollection myplayer = new PlayListCollection(plistc); public static void main(String[] args) { TestDemo td = new TestDemo(); td.test(); td.mainMenu(); } 我定义在TestDemo下,plistc.put(mainPlayList.getPalyListName(), mainPlayList);这行会报错
    2017-03-22 16:23:42
  • 好帮手慕珊 回复 提问者 qq_细竹竿_0 #2
    您好!针对你这个问题,除了变量定义和对象定义的代码可以写在类体里以外,其他代码必须写在方法中。所以调用put方法的那行代码会报错。 再有这里不是把PlayList添加到HashMap中,而是把PlayList添加到定义好的类PlayListCollection中。你提到的代码中的问题:无法调用之前定义的myplayer或者mainPlayList。如果把PlayList放到PlayListCollection中,而playListMenu(PlayListCollection playlistc)这个方法的参数就是PlayListCollection,那么就可以把主播放列表和普通播放列表都用播放列表名称取出来就可以了。
    2017-03-22 18:35:18
提问者 qq_细竹竿_0 2017-03-22 15:33:50

package mediaPlayer;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class TestDemo {
    
    public static void main(String[] args) {
        TestDemo td = new TestDemo();
        td.test();
        td.mainMenu();

    }

    // 歌曲类测试方法
    public void testSong() {
        // Song song1 = new Song("s02","Hello","adele");
        // Song song2 = new Song("s01","Hello","adele");
        // System.out.println(song1.toString());
        // System.out.println(song1.equals(song2));
    }

    // 播放列表类测试方法
    public void testPlayList() {
        Song song1 = new Song("s01", "rolling in the deep", "adele");
        Song song2 = new Song("s02", "hello", "adele");
        Song song3 = new Song("s03", "someone like you", "adele");
        // System.out.println(song1);
        ArrayList<Song> al = new ArrayList<Song>();
        PlayList pl = new PlayList("myfavoritelist", al);
        pl.addToPlayList(song1);
        pl.addToPlayList(song2);
        pl.addToPlayList(song3);
        pl.displayAllSong();
        System.out.println("开始测试通过id查找歌曲*****************************");
        Song tmp = pl.searchSongById("s04");
        if (tmp == null) {
            System.out.println("没有找到对应的歌曲");
        } else {
            System.out.println("找到了!");
            System.out.println(tmp);
        }
        System.out.println("开始测试通过歌曲名查找歌曲*****************************");
        tmp = pl.searchSongByName("hello");
        if (tmp == null) {
            System.out.println("没有找到对应的歌曲");
        } else {
            System.out.println("找到了!");
            System.out.println(tmp);
        }
        System.out.println("开始测试修改歌曲*****************************");
        // song3.setSinger("MJ");
        Song song4 = new Song("s04", "演员", "薛之谦");
        pl.updateSong(song4);
        pl.displayAllSong();
        System.out.println("开始测试删除歌曲*****************************");
        pl.deleteSong("s01");
        pl.displayAllSong();
        System.out.println("开始测试导出歌单*****************************");
        pl.exportPlayList();

    }

    // 播放器类测试方法
    public void testPlayListCollection() {
        System.out.println("开始测试添加播放列表*****************************");

    }

    // 主流程实现(完成相关初始化工作)
    public void test() {
        // 初始化1:新建一个存放播放列表的map
        Map<String, PlayList> plistc = new HashMap<String, PlayList>();
        // 初始化2:创建主播放列表
        PlayList mainPlayList = new PlayList("主播放列表", null);
        // 初始化3:将主播放列表存入plistc map中
        plistc.put(mainPlayList.getPalyListName(), mainPlayList);
        // 初始化4:通过带参构造函数创建播放器类实例mplayer,参数为map类的plistc
        PlayListCollection myplayer = new PlayListCollection(plistc);
        // 初始化完成后实例化的对象: 主播放列表 PlayList
        // myplayer PlayListCollection
        
    }

    // 主菜单方法
    public void mainMenu() {
        Scanner sc = new Scanner(System.in);
        
        while (true) {
            System.out.println("*******************************************");
            System.out.println("            **主菜单**");
            System.out.println("            1--播放列表管理");
            System.out.println("            2--播放器管理");
            System.out.println("            0--退出");
            System.out.println("*******************************************");
            System.out.println("请输入对应数字进行操作");
            int no = sc.nextInt();
            // sc.close();
            switch (no) {
            case 1:
                System.out.println("已选择:播放列表管理");
                playListMenu(myplayer);
                break;
            case 2:
                System.out.println("已选择:播放器管理");
                playerMenu();
                break;
            case 0:
                System.exit(0);
            default:
                System.out.println("输入不正确,请重新输入数字!");
                continue;
            }
        }
        // 测试break是否能够跳出整个菜单循环
        // System.out.println("主菜单程序结束");
    }

    // 播放列表管理菜单方法
    public void playListMenu(PlayListCollection playlistc) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            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("            9--返回上一级菜单");
            System.out.println("*******************************************");
            System.out.println("请输入对应数字进行操作");
            int no = sc.nextInt();
            // sc.close();
            switch (no) {
            case 1:
                System.out.println("已选择:将歌曲添加到主播放列表");
                System.out.println("请输入要添加的歌曲的数量");
                no = sc.nextInt();
                String id = null;
                String name = null;
                String singer = null;
                //此处无法调用之前定义的myplayer或者mainPlayList
                for (int i = 0; i < no; i++) {
                    System.out.println("请输入第" + (i + 1) + "首歌曲:");
                    System.out.println("请输入歌曲的id");
                    id = sc.next();
                    System.out.println("请输入歌曲的名称");
                    name = sc.next();
                    System.out.println("请输入演唱者");
                    singer = sc.next();
                    Song temp = new Song(id,name,singer);
                    
                }
                break;
            case 2:
                System.out.println("已选择:将歌曲添加到普通播放列表");
                break;
            case 3:
                System.out.println("已选择:通过歌曲id查询播放列表中的歌曲");
                break;
            case 4:
                System.out.println("已选择:通过歌曲名称查询播放列表中的歌曲");
                break;
            case 5:
                System.out.println("已选择:修改播放列表中的歌曲");
                break;
            case 6:
                System.out.println("已选择:删除播放列表中的歌曲");
                break;
            case 7:
                System.out.println("已选择:显示播放列表中的所有歌曲");
                break;
            case 8:
                System.out.println("已选择:导出歌单");
                break;
            case 9:
                System.out.println("已选择:返回上一级菜单");
                mainMenu();
                break;
            case 0:
                System.exit(0);
            default:
                System.out.println("输入不正确,请重新输入数字!");
                continue;
            }
        }
    }

奇巧巧克力 2017-03-22 15:19:13

你好,你是在两个类中还是同一个类中出现这种问题,请把你的代码贴出来,方便为你解答。~祝学习愉快!

  • 提问者 qq_细竹竿_0 #1
    代码加粗的地方
    2017-03-22 15:34:27
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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