求大佬看一下,我是照著老師的代碼寫的,怎么拋異常了?我該怎么改?
package?imoocCollection; import?java.util.HashMap; import?java.util.Map; import?java.util.Map.Entry; import?java.util.Scanner; import?java.util.Set; public?class?MapTest?{ //建一個(gè)map類型的屬性,用來承裝student對(duì)象的 public?Map<String,?Student>?students; //在構(gòu)造方法上給students初始化 public?MapTest()?{ this.students?=?new?HashMap<String,?Student>(); } //測(cè)試添加方法:輸入學(xué)生的ID,判斷是否被占用 //若未被占用,提示輸入學(xué)生姓名,創(chuàng)建新的學(xué)生對(duì)象,并且添加到students中 //若被占用,打印輸出,該ID已被占用 public?void?testPut()?{ //創(chuàng)建一個(gè)Scanner對(duì)象 Scanner?sc?=?new?Scanner(System.in); for(int?i=0;?i<3;?i++)?{ ?System.out.println("請(qǐng)輸入學(xué)生ID:"); ?String?id?=?sc.next(); ?//判斷該ID是否被占用 ?Student?s?=?students.get(id); ?if(s?==?null)?{ ?//提示輸入學(xué)生姓名 ?System.out.println("請(qǐng)輸入學(xué)生姓名:"); ?String?name?=?sc.next(); ?//創(chuàng)建新的學(xué)生對(duì)象 ?Student?st?=?new?Student(id,?name); ?//通過調(diào)用students的put方法添加學(xué)生到hash?map里 ?students.put(id,?st); ?System.out.println("成功添加學(xué)生:"?+?students.get(id).name); ?} ?else?{ ?System.out.println("該學(xué)生ID已被占用"); ?continue; ?} } } //測(cè)試刪除Map中的映射 public?void?testRemove()?{ //獲取從鍵盤輸入的待刪除的學(xué)生ID Scanner?sc?=?new?Scanner(System.in); while(true)?{ //提示輸入待刪除的學(xué)生ID System.out.println("請(qǐng)輸入要?jiǎng)h除的學(xué)生ID:"); String?id?=?sc.next(); System.out.println("接收到要?jiǎng)h除的學(xué)生ID:"?+?id); //判斷id是否有對(duì)應(yīng)的學(xué)生對(duì)象 System.out.println(students.get(id).name); if(students.get(id)?!=?null)?{ System.out.println("進(jìn)入到if條件句里!"); students.remove(id); System.out.println("已經(jīng)remove掉ID了"); } else?{ System.out.println("該ID不存在!"); continue; } System.out.println("成功刪除學(xué)生:"?+?students.get(id).name); break; } } //通過entrySet方法來遍歷Map public?void?testEntrySet()?{ //通過entrySet方法,返回Map中所有的鍵值對(duì) Set<Entry<String,?Student>>?entrySet?=?students.entrySet(); for(Entry<String,?Student>?entry?:?entrySet)?{ System.out.println("取得鍵:"?+?entry.getKey()); System.out.println("對(duì)應(yīng)的值為:"?+?entry.getValue().name); } } //測(cè)試map的keySet()方法 public?void?testKeySet()?{ //通過keySet方法返回Map中所有鍵的Set集合 Set<String>?keySet?=?students.keySet(); //取得set的容量 System.out.println("總共有:"?+?keySet.size()?+?"個(gè)學(xué)生!"); //遍歷keySet,取得每一個(gè)鍵,在調(diào)用map的get方法取得每個(gè)鍵對(duì)應(yīng)的value for(String?s?:?keySet)?{ Student?st?=?students.get(s); if(st?!=?null)?{ System.out.println("學(xué)生:"?+?st.name); } } } public?static?void?main(String[]?args)?{ //?TODO?Auto-generated?method?stub MapTest?mt?=?new?MapTest(); mt.testPut(); mt.testKeySet(); mt.testRemove(); mt.testEntrySet(); } }
請(qǐng)輸入學(xué)生ID:
1
請(qǐng)輸入學(xué)生姓名:
Tom
成功添加學(xué)生:Tom
請(qǐng)輸入學(xué)生ID:
2
請(qǐng)輸入學(xué)生姓名:
Jack
成功添加學(xué)生:Jack
請(qǐng)輸入學(xué)生ID:
3
請(qǐng)輸入學(xué)生姓名:
XiaoMing
成功添加學(xué)生:XiaoMing
總共有:3個(gè)學(xué)生!
學(xué)生:Tom
學(xué)生:Jack
學(xué)生:XiaoMing
請(qǐng)輸入要?jiǎng)h除的學(xué)生ID:
3
接收到要?jiǎng)h除的學(xué)生ID:3
Exception in thread "main" XiaoMing
進(jìn)入到if條件句里!
已經(jīng)remove掉ID了
java.lang.NullPointerException
at imoocCollection.MapTest.testRemove(MapTest.java:67)
at imoocCollection.MapTest.main(MapTest.java:105)
2018-01-10
如果我猜得沒錯(cuò)的話,是System.out.println("成功刪除學(xué)生:"?+?students.get(id).name);這句話錯(cuò)了,已經(jīng)被你刪了,結(jié)果你又get他的name不是獲取不到東西?
2018-01-19
("成功刪除學(xué)生:"?+?students.get(id).name);會(huì)報(bào)空指針異常?。?!之前已經(jīng)remove了的!!
? ?這樣就可以了:
? Student stu=students.get(id);
? ?students.remove(id);
? ?System.out.println("成功刪除學(xué)生:"+stu.name); ?