代碼是按照老師的寫的,運行到student st=students.get(ID);拋出異常
請輸入學生ID
1
Exception in thread "main" java.lang.NullPointerException
?at com.zhou.jihe.testMap.testput(testMap.java:24)
?at com.zhou.jihe.testMap.main(testMap.java:43)
package com.zhou.jihe;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class testMap {
public Map<String,student> students;
public void testMap()
{
??? this.students=new HashMap<String,student>();?
}
public void testput()
?{
?
?Scanner console=new Scanner(System.in);
?int i=0;
?while(i<3)
?{
??System.out.println("請輸入學生ID");
??String ID=console.next();
??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.get(ID).name);
?i++; ???
??}
??else
??{System.out.println("改ID已經被占用");
??continue;
??}
?}
?
?}
public static void main(String[] args) {
?testMap tm=new testMap();
?tm.testput();
?tm.testKeySet();
//?student s=new student("1","小明");
//?System.out.println(s.id);
}
public void testKeySet()
{
?Set<String> keyset=students.keySet();
?System.out.println("總共有"+students.size()+"個學生");
?for(String stuID:keyset)
?{
??student st=students.get(stuID);
??if(st!=null)
??{
???System.out.println("學生:"+st.name);
??}
?}
?}
}
求大神幫忙解答
2016-01-20
構造方法的格式是 ?修飾詞+類名{} 和返回值有關的都不能加
2015-07-12
問題原因已經找到,初始化students時,用了pupublic void testMap()
{
? ?this.students=new HashMap<String,student>();
}
構造方法使用了void,相當于并未對students進行初始化,所以指針指向為空,謝謝各位的關注