使用链表的 NullPointerException 错误 [英] NullPointerException Error using linked lists
问题描述
我刚刚完成了这个程序的工作并让它编译,但它在用户输入后中断并给了我这个:
I just finished up working on this program and got it to compile but it breaks after user input and gives me this:
请在键盘上输入 0 个或多个值12 4 3 2 1
Please input 0 or more values at keyboard 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("
What 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);
}
}
}
有什么想法吗?
输出应类似于以下内容:
The output should be similar to the following:
请在键盘上输入 0 个或多个值
Please input 0 or more values at keyboard
12 4 -1 5 3 0 2
12 4 -1 5 3 0 2
正在打印列表
-1 0 2 3 4 5 12你在找什么钥匙?15未找到您的密钥
-1 0 2 3 4 5 12 What key are you searching for? 15 Your key was not found
推荐答案
Node head = null;
每当你在一个空对象上调用一个方法时,你都会得到一个 nullPointerException.这就是 head.setNext(first);
给你异常的原因.所以你可以这样做
whenever you call a method on a null object you get an nullPointerException.That is why head.setNext(first);
is giving you exception. so instead of this you can do
Node head = new Node();
您将通过此避免 NullPointerException.
you will avoid NullPointerException with this.
根据您的要求,您应该这样做.
According to your requirement you should do this.
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个节点,无论你插入多少个数字)
Note: I am assuming that setNext() inserts the node in the list at appropriate location not directly in the next position of head node (otherwise you will get only 2 nodes no matter how many numbers you insert)
这篇关于使用链表的 NullPointerException 错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!