- Java code
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Random;import java.util.Set;import java.util.Map.Entry;public class Book { /** * 第二题 */ private String name;// 书名 private int page;// 页数 public Book(String name, int page) {// 有参构造 super(); this.name = name; this.page = page; } public String getName() {// setter getter方法 return name; } public void setName(String name) { this.name = name; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public static Map<String, Book> map = new HashMap<String, Book>(); public void initMap() { map.put("SA001", new Book("SOFT_A", 1));// 初始化 map.put("SA002", new Book("SOFT_B", 3)); map.put("SA003", new Book("SOFT_C", 5)); map.put("SA004", new Book("SOFT_D", 7)); map.put("SA005", new Book("SOFT_E", 9)); map.put("SA006", new Book("SOFT_F", 11)); map.put("SA007", new Book("SOFT_G", 13)); map.put("SA008", new Book("SOFT_H", 15)); map.put("SA009", new Book("SOFT_I", 17)); map.put("SA010", new Book("SOFT_J", 19)); } public static void printAllBookInf() { System.out.println("编号\t书名\t页数"); Set<Entry<String, Book>> set = map.entrySet(); for (Iterator iterator = set.iterator(); iterator.hasNext();) {// 迭代输出对象 Entry<String, Book> entry = (Entry<String, Book>) iterator.next(); System.out.println(entry.getKey() + "\t" + entry.getValue().getName() + "\t" + entry.getValue().getPage()); }// 打印出所有图书信息 } public static void printOneBookInf() { Random ran = new Random(); int i = ran.nextInt(10) + 1;// 随机产生书号 String str = String.valueOf(i); String id = "SA0" + str; System.out.println("该编号对应的书名:" + map.get(id).getName() + " 页数为:" + map.get(id).getPage()); }// 打印随机产生书号的信息 public static void main(String[] args) { Book.printAllBookInf();// 调用打出所有图书的方法 Book.printOneBookInf();// 调用打出随机产生图书的方法 }}
运行结果:
编号 书名 页数
Exception in thread "main" java.lang.NullPointerException
at Book.printOneBookInf(Book.java:68)
at Book.main(Book.java:74)
出现空指针错误,自己也不怎么会调试,求指点
------解决方案--------------------
呃 刚看了下 你没有调用map的初始化方法也就是39行的initMap()方法
map里面没有值 只是一个空的map 你在调用map.get(id)的时候肯定是空指针
还有 就是LS所回答的了 我稍改了一下
- Java code
import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Random;import java.util.Set;public class Book { /** * 第二题 */ private String name;// 书名 private int page;// 页数 public Book(String name, int page) {// 有参构造 super(); this.name = name; this.page = page; } public String getName() {// setter getter方法 return name; } public void setName(String name) { this.name = name; } public int getPage() { return page; } public void setPage(int page) { this.page = page; } public static Map<String, Book> map = new HashMap<String, Book>(); public static void initMap() { map.put("SA001", new Book("SOFT_A", 1));// 初始化 map.put("SA002", new Book("SOFT_B", 3)); map.put("SA003", new Book("SOFT_C", 5)); map.put("SA004", new Book("SOFT_D", 7)); map.put("SA005", new Book("SOFT_E", 9)); map.put("SA006", new Book("SOFT_F", 11)); map.put("SA007", new Book("SOFT_G", 13)); map.put("SA008", new Book("SOFT_H", 15)); map.put("SA009", new Book("SOFT_I", 17)); map.put("SA010", new Book("SOFT_J", 19)); } public static void printAllBookInf() { System.out.println("编号\t书名\t页数"); Set<Entry<String, Book>> set = map.entrySet(); for (Iterator iterator = set.iterator(); iterator.hasNext();) {// 迭代输出对象 Entry<String, Book> entry = (Entry<String, Book>) iterator.next(); System.out.println(entry.getKey() + "\t" + entry.getValue().getName() + "\t" + entry.getValue().getPage()); }// 打印出所有图书信息 } public static void printOneBookInf() { Random ran = new Random(); int i = ran.nextInt(10) + 1;// 随机产生书号 System.out.println(i); String str = String.valueOf(i); String id = "SA00" + str; //对应的key System.out.println("该编号对应的书名:" + map.get(id).getName() + " 页数为:" + map.get(id).getPage()); }// 打印随机产生书号的信息 public static void main(String[] args) { Book.initMap(); //初始化map中的数据 Book.printAllBookInf();// 调用打出所有图书的方法 Book.printOneBookInf();// 调用打出随机产生图书的方法 }}