问答详情
源自:5-2 学生选课---使用 Map 添加学生

使用get(ID).name获取学生姓名和直接用st.name有什么区别

students.get(ID).name 为什么不能替换成 st.name,试过会报错


提问者:T桃T 2020-07-24 13:39

个回答

  • 风沙战场封杀
    2020-07-26 18:41:20
    已采纳

    老师的testPut方法如下(应该是一模一样的)
    (多行注释的地方是我解释的部分)
    
    public void testPut() {		
        //创建一个Scanner对象,用来获取输入的学生ID和姓名
        Scanner input=new Scanner(System.in);
        int i=0;
        while(i<3) {			
            System.out.println("请输入学生ID:");			
            String ID=input.next();			
            //判断该ID是否被占用			
            Student st=students.get(ID);
            /*
            *这里的st是Student类的一个对象,
            *是输入的ID(key)对应的value
            *但此时的st不知道他是不是空值(null)		
            */
            if(st==null) {				
                //提示输入学生姓名				
                System.out.println("请输入学生姓名:");				
                String name=input.next();				
                //创建新的学生对象				
                Student newStudent=new Student(ID,name);
                /*
                *这里的newStudent是Student的一个对象
                *用于在students集中存入一个键值对
                */			
                //通过调用students的put方法,添加“ID-学生”映射				
                students.put(ID, newStudent);	
                /*
                *要注意的是,此时的st是空值(null)
                *而当要输出对象的属性时对象为null,就会抛出异常
                *所以可以把“students.get(ID).name”改成“newStudent.name”
                *此时就不会抛出异常
                */			
                System.out.println("成功添加学生:"+students.get(ID).name);			
            }else {				
                System.out.println("该学生的ID已被占用!");				
                continue;			
            }			
            i++;
        }
    }
    
    希望对你有帮助!!:)


  • 慕瓜5527657
    2020-08-07 18:00:10

    为什么我这样改的就没有报错