NullPointerException Fehler beim Verwenden von verknüpften Listen
Ich habe gerade die Arbeit an diesem Programm beendet und es zum Kompilieren gebracht, aber es bricht nach Benutzereingaben ab und gibt mir Folgendes:
Bitte geben Sie 0 oder mehr Werte über die Tastatur 12 4 3 2 1 ein
Exception in thread "main" java.lang.NullPointerException
at Search.buildList(Search.java:41)
at Search.main(Search.java:10)
Hier ist der Code:
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);
}
}
}
Irgendwelche Ideen?
Die Ausgabe sollte ungefähr so aussehen:
Bitte geben Sie 0 oder mehr Werte über die Tastatur ein
12 4 -1 5 3 0 2
Jetzt Liste drucken
-1 0 2 3 4 5 12 Welchen Schlüssel suchen Sie? 15 Ihr Schlüssel wurde nicht gefunden