我刚刚完成了这个程序的工作并编译了它,但它在用户输入后中断并给了我这个:
请通过键盘输入0个或多个值 12 4 3 2 1
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() < (int)prev.getItem())
{
head.setNext(curr);
curr.setNext(prev);
break;
}
if (prev.getNext() == null)
{
prev.setNext(curr);
break;
}
}*/
}
return first;
}
private static Node insert(Node head, Comparable newValue)
{
Node prev, curr = head;
for (prev = null, curr = head;
curr != null && newValue.compareTo(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 找不到您的 key
最佳答案
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 个节点,无论您插入多少个数字)
关于java - NullPointerException 使用链表时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13282270/