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("\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);
}
}
}
任何想法?
输出应类似于以下内容:
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;
无论何时在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屋!