I am struggling finding out why am I getting a null pointer exception. I know it's because of the null but I can't seem find which one

Daniel

Here is the code. When I started to run the program I entered the option number 1 and it gave me an error saying Exception in thread "main" java.lang.NullPointerException. Any help would be appreciated.

The Database.txt should look like this

510421600;Shelley;Morgan
790701850;Holton;Jose
932371897;Hynes;Naomi
714797789;Kunkel;Dylan
878566780;Grisham;Ellie
810639750;Childs;Lillian

Code

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;
    }

}
Rail Yulgutlin

I've debugged your code. So look at line

while((tmp != null) && SSN.charAt(0) >= tmp.first.SSN.charAt(0) )

tmp.first.SSN gives NULL, and you're trying to get charAt from it. Check it:

System.out.println(tmp.first.SSN);

So you can add some condition to prevent this exception.

Look at your insertInSkip method:

    //Inserting Skip Search
    public void insertInSkip(String SSN, String lName, String fName)
    {

        Node tmp = head;
//        System.out.println(tmp.first);
//        System.out.println(tmp.second);
//        System.out.println(tmp.third);
//        System.out.println(tmp.first.SSN);

        while((tmp != null) && (tmp.first.SSN != null) && SSN.charAt(0) >= tmp.first.SSN.charAt(0) ) // changed
        {
            tmp = tmp.first;
        }

        while((tmp != null) && (tmp.second.SSN != null) && SSN.charAt(1) >= tmp.second.SSN.charAt(1) ) // changed
        {
            tmp = tmp.second;
        }

        while((tmp != null) && (tmp.third.SSN != null) && SSN.charAt(2) >= tmp.third.SSN.charAt(2) ) // changed
        {
            tmp = tmp.third;
        }
        System.out.println("ssn="+SSN);
        System.out.println(tmp.fourth.SSN);
        if (tmp.fourth.SSN != null){  // changed
            System.out.println(SSN.compareTo(tmp.fourth.SSN));
        }

        while((tmp != null) && (tmp.fourth.SSN != null) && (SSN.compareTo(tmp.fourth.SSN) > 0)) // changed
        {
            tmp = tmp.fourth;
        }
        if(SSN.equals(tmp.SSN))
        {
                return;
        }
        else
        {
            Node temp = new Node(SSN, fName, lName);
            temp.fourth = tmp.fourth;
            tmp.fourth = temp;
        }
        endTimer();  
    } 

Here's the output:

Select an option: 
1. Load database
2. Skip Search
3. Exit 
1
ssn=510421600
null
ssn=790701850
510421600
2
ssn=932371897
510421600
4
ssn=714797789
510421600
2
ssn=878566780
510421600
3
ssn=810639750
510421600
3
Data loaded in 0.0 secs.
Select an option: 
1. Load database
2. Skip Search
3. Exit 

UPD SkipSearch :

// SkipSearch method
public void skipSearch(String SSN)
{
    Node tmp = head;
    //System.out.println(tmp);

    if (tmp != null) {
        while((tmp.first != null) 
                && (tmp.first.SSN != null) 
                && (SSN.charAt(0) < tmp.first.SSN.charAt(0))
                )
        {
            tmp = tmp.first;
        }
        while((tmp.second != null) 
                && (tmp.second.SSN != null) 
                && SSN.charAt(1) < tmp.second.SSN.charAt(1))
        {
            tmp = tmp.second;
        }
        while((tmp.third != null) 
                && (tmp.third.SSN != null) 
                && SSN.charAt(2) < tmp.third.SSN.charAt(2))
        {
            tmp = tmp.third;
        }
        while((tmp.fourth != null) 
                && (tmp.fourth.SSN != 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");
            }
        }
    }
}  

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Why am I getting a null pointer access?

Why am i getting Possible null pointer dereference in findbug?

I am getting Array out of bounds Exception but i don't know why the error is occurring

Servet - Why am i getting null pointer exception?

I am getting Null Pointer Exception in GridView Android

Why am I getting getApplicationcontext() null?

Why am I getting a null pointer exception in my iterator?

Why am I getting a Null Pointer Exception when reading user data from Firebase?

Why am I NOT getting a Null Reference Exception?

I am trying to access attribute which I passed but it's giving me a null pointer exception

Why am I getting null as a value of array?

Why I am getting null

Why am i NOT getting null pointer exception in this case while adding null to a list and sorting it

Why am I getting null as the destination?

Cant find out why i'm getting null pointer exception, can anybody help me?

Why am I getting null in Console?

why am i getting null pointer exception when trying to set a value to "rating" in my rating bar?

I am getting null pointer exception when I an trying to putExtra from intent

Why am I getting parameter value as null?

Why am I getting a null pointer exception when passing an ArrayList of strings from one activity to another?

I am getting Null pointer exception when i run my app 2nd time

Why I am getting a null pointer at my getter

Apache POI: Why am I getting a null pointer exception with Cell.getCellType() within an if statement that doesn't occur if the cell is null?

Why am I getting a Null Pointer Exception Error on Runtime as soon as i run my app, it crashes?

Why am I getting a null pointer exception for my object and how can I fix it?

I am getting The operator '+' can't be unconditionally invoked because the receiver can be 'null'

My app is getting a null pointer exception immediately after i enter into the register activity, I am unable to figure out the reason

why am I getting Null Pointer Exception while trying to check if the username is already present in the database?

Why am i getting null for calculating a total?