qq_OK_21
2018-01-10 19:45
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 { //建一个map类型的属性,用来承装student对象的 public Map<String, Student> students; //在构造方法上给students初始化 public MapTest() { this.students = new HashMap<String, Student>(); } //测试添加方法:输入学生的ID,判断是否被占用 //若未被占用,提示输入学生姓名,创建新的学生对象,并且添加到students中 //若被占用,打印输出,该ID已被占用 public void testPut() { //创建一个Scanner对象 Scanner sc = new Scanner(System.in); for(int i=0; i<3; i++) { System.out.println("请输入学生ID:"); String id = sc.next(); //判断该ID是否被占用 Student s = students.get(id); if(s == null) { //提示输入学生姓名 System.out.println("请输入学生姓名:"); String name = sc.next(); //创建新的学生对象 Student st = new Student(id, name); //通过调用students的put方法添加学生到hash map里 students.put(id, st); System.out.println("成功添加学生:" + students.get(id).name); } else { System.out.println("该学生ID已被占用"); continue; } } } //测试删除Map中的映射 public void testRemove() { //获取从键盘输入的待删除的学生ID Scanner sc = new Scanner(System.in); while(true) { //提示输入待删除的学生ID System.out.println("请输入要删除的学生ID:"); String id = sc.next(); System.out.println("接收到要删除的学生ID:" + id); //判断id是否有对应的学生对象 System.out.println(students.get(id).name); if(students.get(id) != null) { System.out.println("进入到if条件句里!"); students.remove(id); System.out.println("已经remove掉ID了"); } else { System.out.println("该ID不存在!"); continue; } System.out.println("成功删除学生:" + students.get(id).name); break; } } //通过entrySet方法来遍历Map public void testEntrySet() { //通过entrySet方法,返回Map中所有的键值对 Set<Entry<String, Student>> entrySet = students.entrySet(); for(Entry<String, Student> entry : entrySet) { System.out.println("取得键:" + entry.getKey()); System.out.println("对应的值为:" + entry.getValue().name); } } //测试map的keySet()方法 public void testKeySet() { //通过keySet方法返回Map中所有键的Set集合 Set<String> keySet = students.keySet(); //取得set的容量 System.out.println("总共有:" + keySet.size() + "个学生!"); //遍历keySet,取得每一个键,在调用map的get方法取得每个键对应的value for(String s : keySet) { Student st = students.get(s); 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(); mt.testRemove(); mt.testEntrySet(); } }
请输入学生ID:
1
请输入学生姓名:
Tom
成功添加学生:Tom
请输入学生ID:
2
请输入学生姓名:
Jack
成功添加学生:Jack
请输入学生ID:
3
请输入学生姓名:
XiaoMing
成功添加学生:XiaoMing
总共有:3个学生!
学生:Tom
学生:Jack
学生:XiaoMing
请输入要删除的学生ID:
3
接收到要删除的学生ID:3
Exception in thread "main" XiaoMing
进入到if条件句里!
已经remove掉ID了
java.lang.NullPointerException
at imoocCollection.MapTest.testRemove(MapTest.java:67)
at imoocCollection.MapTest.main(MapTest.java:105)
如果我猜得没错的话,是System.out.println("成功删除学生:" + students.get(id).name);这句话错了,已经被你删了,结果你又get他的name不是获取不到东西?
("成功删除学生:" + students.get(id).name);会报空指针异常!!!之前已经remove了的!!
这样就可以了:
Student stu=students.get(id);
students.remove(id);
System.out.println("成功删除学生:"+stu.name);
Java入门第三季
409768 学习 · 4463 问题
相似问题