這是代碼。當我開始運行程序時,我輸入了選項1,它給了我一個錯誤,說明線程「main」java.lang.NullPointerException中的異常。任何幫助,將不勝感激。我正在努力找出爲什麼我得到一個空指針異常。我知道這是因爲空,但我似乎無法找到哪一個
的Database.txt應該是這樣的
510421600;Shelley;Morgan
790701850;Holton;Jose
932371897;Hynes;Naomi
714797789;Kunkel;Dylan
878566780;Grisham;Ellie
810639750;Childs;Lillian
代碼
import java.io.File;
import java.util.Scanner;
import java.io.*;
public class ListExample
{
Node head;
Node tail;
public ListExample()
{
head = null;
}
public ListExample(Node head)
{
this.head = head;
}
//Load Database
public void Database()
{
head = null;
Node tmp = null;
Node lastFirst = tmp;
Node lastSecond = tmp;
Node lastThird = tmp;
for(int i = 9;i >= 0; i--)
{
String L1 = Integer.toString(i);
for(int j = 9;j >= 0; j--)
{
String L2 = Integer.toString(j);
for(int k = 9;k >= 0; k--)
{
String L3 = Integer.toString(k);
String allNum = L1 + L2 + L3 + "000000";
tmp = new Node(allNum);
tmp.third = lastThird;
tmp.fourth = lastThird;
lastThird = tmp;
}
tmp.second = lastSecond;
lastSecond = tmp;
}
tmp.first = lastFirst;
lastFirst = tmp;
}
head = tmp;
}
//Inserting Skip Search
public void insertInSkip(String SSN, String lName, String fName)
{
Node tmp = head;
while((tmp != null) && SSN.charAt(0) >= tmp.first.SSN.charAt(0))
{
tmp = tmp.first;
}
while((tmp != null) && SSN.charAt(1) >= tmp.second.SSN.charAt(1))
{
tmp = tmp.second;
}
while((tmp != null) && SSN.charAt(2) >= tmp.third.SSN.charAt(2))
{
tmp = tmp.third;
}
System.out.println(SSN);
System.out.println(tmp.fourth.SSN);
System.out.println(SSN.compareTo(tmp.fourth.SSN));
while((tmp != null) && (SSN.compareTo(tmp.fourth.SSN) > 0))
{
tmp = tmp.fourth;
}
if(SSN.compareTo(tmp.SSN) == 0)
{
return;
}
else
{
Node temp = new Node(SSN, fName, lName);
temp.fourth = tmp.fourth;
tmp.fourth = temp;
}
endTimer();
}
// SkipSearch method
public void skipSearch(String SSN)
{
Node tmp = head;
while((tmp.first != null) && (SSN.charAt(0) < tmp.first.SSN.charAt(0)))
{
tmp = tmp.first;
}
while((tmp.second != null) && SSN.charAt(1) < tmp.second.SSN.charAt(1))
{
tmp = tmp.second;
}
while((tmp.third != null) && SSN.charAt(2) < tmp.third.SSN.charAt(2))
{
tmp = tmp.third;
}
while((tmp.fourth != null) && SSN.charAt(3) < tmp.fourth.SSN.charAt(3))
{
tmp = tmp.fourth;
}
while(tmp.fourth != null)
{
tmp = tmp.fourth;
if(tmp.SSN.equals(SSN))
{
System.out.println(tmp.toString()+"has been found.");
endTimer();
System.out.println("Search took: " + timeElapsed()+ " seconds");
}
}
}
// Read the file Database.txt
public void readFile(String data)
{
startTimer();
File file = new File(data);
String firstName = " ";
int count = 0;
try
{
Scanner scanner = new Scanner(file);
while(scanner.useDelimiter(";") != null && scanner.hasNext())
{
String ssn = scanner.next();
String lastN = scanner.next();
if(scanner.useDelimiter("\r") != null)
{
scanner.skip(";");
String firstN = scanner.next();
firstName = firstN;
if(scanner.hasNext())
{
scanner.skip("\r");
scanner.skip("\n");
}
}
insertInSkip(ssn, firstName, lastN);
count++;
if(count % 1000 == 0)
{
System.out.print(".");
}
}
scanner.close();
endTimer();
System.out.println("Data loaded in " + timeElapsed() + " secs.");
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
}
// End of program
public void endProg()
{
System.out.println("Program exiting..");
System.exit(0);
}
public long startTimer()
{
return System.currentTimeMillis();
}
public long endTimer()
{
return System.currentTimeMillis();
}
public float timeElapsed()
{
return (endTimer() - startTimer())/1000;
}
//run the program
public void run(ListExample list)
{
Scanner scanner = new Scanner(System.in);
int option;
System.out.println("Select an option: ");
System.out.println("1. Load database\n2. Skip Search\n3. Exit ");
option = scanner.nextInt();
while(true)
{
switch(option)
{
case 1:
list.Database();
list.readFile("Database.txt");
break;
case 2:
System.out.println("Enter SSN: ");
String ssn2 = scanner.next();
list.skipSearch(ssn2);
break;
case 3:
endProg();
break;
default:
System.out.println("Incorrect value entered. Please enter a number between 1 and 3.");
System.out.println("Select an option: ");
System.out.println("1. Load database\n2. Skip Search\n3. Exit ");
option = scanner.nextInt();
break;
}
System.out.println("Select an option: ");
System.out.println("1. Load database\n2. Skip Search\n3. Exit ");
option = scanner.nextInt();
}
}
public static void main(String[] args) {
ListExample list = new ListExample();
list.run(list);
}
}
Node.java
public class Node {
public String SSN, fName, lName, allNum;
public Node first;
public Node second;
public Node third;
public Node fourth;
public Node head, tail, next;
public Node(String allNum){
this.allNum = allNum;
}
public Node(String SSN, String fName, String lName){
this.SSN = SSN;
this.fName = fName;
this.lName = lName;
}
}
你是知道的事實, 「查找我的NullPointerException異常」問題會很快得到解決,但你沒有告訴我們你的錯誤是什麼。請告訴我們你的堆棧跟蹤。 – byxor
您是否嘗試調試您的代碼? – Maverick