为什么我的代码运行出来报了空指针!

来源:5-2 学生选课---使用 Map 添加学生

云世界小默

2015-09-17 16:48

package com.immoc.collection;

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

public class Maptest {
    
    //用来橙装学生类型的对象
    
    
    public Map<String,Student>students;
    
        public void testMap(){
            
            this.students = new HashMap<String,Student>();
        }
             
        /**
         *
         * 测试添加:判断学生ID是否被占用
         *
         *
         *
         * @param args
         * @return
         */
        
        public void testPut(){
            //创建Scanner对象,用来获取输入的学生ID与姓名
            Scanner console = new Scanner (System.in);
            int i =0;
            while(i<3){
                System.out.println("请输入学生ID");
                String ID = console.next();
                /*判断ID是否被占用*/
                Student st=students.get(ID);
                if( st == null ){
                    System.out.println("请输学生姓名:");
                    String name = console.next();
                    //创建学生对象
                    Student newStudent = new Student (ID,name);
                    students.put(ID, newStudent);
                    System.out.println("成功添加学生:“+students。getID。name");
                    i++;    
                    
                }else{
                    System.out.println("该学生ID已被占用");
                    continue;
                    
                }
                
                
                
            }
            
            
        }
        
        public  void testKeySet(){
            //通过keyset方法,返回Map所有键的SET集合
            Set<String> keySet = students.keySet();
            //便利ketSet,取得每一个键,在调用get取得每个键对应的Value
            
            System.out.println("总共有:"+students.size()+"个学生");
            //取得学生的容量
            for(String stuId:keySet){
                
                Student st = students.get(stuId);
                if(st!=null)
                    System.out.println("学生:"+st.name);
                
            }
            
            
            
            
        }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
    
        Maptest mt = new Maptest();
        mt.testPut();
        mt.testKeySet();
        
        
        
    }

}

写回答 关注

3回答

  • KTZ_小凯
    2015-11-13 11:43:45

    public void testMap(){
                
                this.students = new HashMap<String,Student>();
            }

    把void去掉就可以了。

  • 无动于衷
    2015-09-17 17:13:52

            public void testMap(){
                
                this.students = new HashMap<String,Student>();
            }
       这里你是想写构造方法吧?

       你写的这个方法没有执行,students没有初始化。

       构造方法:

            public Maptest(){
                
                this.students = new HashMap<String,Student>();
            }

       创建Maptest时,students就会初始化。
                 

  • 云世界小默
    2015-09-17 16:50:18

    http://img.mukewang.com/55fa7ebf0001e33704920173.jpg求解一下

    teddy_...

    把testMap() 改成Maptest()

    2015-09-17 17:21:56

    共 1 条回复 >

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题