这是代码。当我开始运行程序时,我输入了选项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