NullPointerException使用链接列表时出错

我刚刚完成了这个程序的工作,并将其编译,但在用户输入后它会中断并给我这个:

请在键盘12 4 3 2 1输入0或更多值

Exception in thread "main" java.lang.NullPointerException at Search.buildList(Search.java:41) at Search.main(Search.java:10) 

这是代码:

 import java.io.*; import java.util.*; public class Search { public static void main(String argv[]) throws IOException { Scanner stdin = new Scanner(System.in); System.out.println("Please input 0 or more values at keyboard"); Node head = buildList(); System.out.println("Now printing list"); printList(head); System.out.println("\nWhat key in list are you searching for? "); int key = stdin.nextInt(); System.out.print("Your key was "); if (search(head, key)) System.out.println("found."); else System.out.println("not found."); } private static void printList(Node head) { if (head != null) { System.out.print(head.getItem() + " "); printList(head.getNext()); } } private static Node buildList() throws IOException { // Post : Inserts 0 or more numerical values from keyboard into list // using the Scanner class and returns head of list Scanner input = new Scanner(System.in); Node head = null; Node first = new Node(input.nextInt()); head.setNext(first); while(input.hasNext()) { insert(first, input.nextInt()); /* Node curr = new Node(input.nextInt()); Node prev = head; while (true) { prev = prev.getNext(); if ((int)curr.getItem()  0; prev = curr, curr = curr.getNext() ) {} Node newNode = new Node(newValue, curr); if (prev != null) { prev.setNext(newNode); return head; } else return newNode; } private static boolean search(Node head, Comparable key) { // PRE: head points to the front of linked list; list may be // empty or non-empty; key is item searching for // POST: returns true or false regarding whether key is found in // list if (head == null){ return false;} else if (head.getItem().equals(key)){ return true;} else { return search(head.getNext(), key); } } } 

有任何想法吗?

输出应类似于以下内容:

请在键盘输入0或更多值

12 4 -1 5 3 0 2

现在打印清单

-1 0 2 3 4 5 12你在找什么钥匙? 15找不到你的钥匙

 Node head = null; 

无论何时在null对象上调用方法,都会得到nullPointerException。这就是为什么head.setNext(first); 给你例外。 所以你可以这样做而不是这个

 Node head = new Node(); 

你会避免使用NullPointerException。

根据您的要求,您应该这样做。

 private static Node buildList() throws IOException { // Post : Inserts 0 or more numerical values from keyboard into list // using the Scanner class and returns head of list Scanner input = new Scanner(System.in); Node head = null; Node first = new Node(input.nextInt()); head=first; //assigning the first value to head while(input.hasNext()) { insert(first, input.nextInt()); head.setNext(first);//insert the node in the list } return first; } 

注意:我假设setNext()在列表中的适当位置插入节点而不是直接插入头节点的下一个位置(否则无论插入多少个数字,都只能获得2个节点)

Node head = null;

上面的行将使作为Node类型的object reference variablehead变为nul l,现在调用此对象引用变量的任何方法都将导致NullPointerException

Node head = new Node();

该行将是一种更好的方法,因为这将防止 NullPointerException