Kent Luttrell
Kent Luttrell

Reputation: 15

NULL value in Linked List in Java

We are trying to tokenize a line of input from a file into an ADTList "tokens". It is reading the information ok, but the first object in the list is being set to NULL. We have tried many changes but cannot figure out where this is occurring. Here is the code:

    //method to covernt lines of input from a file to individual tokens
public static ADTList tokenizer(String input){

    String aToken;                                                      //defining variable to create token
    ADTList tokens = new ADTList();                                     //defining return variable

for (int i = 0; i < input.length(); i++){                           //loop to iterate through input string
        aToken = "";                                                    //clearing variable to hold next string
        if (input.charAt(i) == '(' || input.charAt(i) == ')' ||
                operator(input.charAt(i))){                             //testing for parenthesis or operator
            aToken += input.charAt(i);                                  //concatenating character to string
            tokens.add(aToken);                                         //adding new string to token list
        }else if (Character.isLetter(input.charAt(i))){                 //testing for variable letter
            aToken += input.charAt(i);
    i++;                                                        //moving to next character in string
            if (i < input.length() && Character.isLetterOrDigit(input.charAt(i))){   
                do{                                                     //loop to test for end of variable
                    aToken += input.charAt(i);
                    i++;
                }while (i < input.length() && Character.isLetterOrDigit(input.charAt(i)));    //end of variable condition
            }
            tokens.add(aToken);
            i--;                                                        //decrementing counter variable
        }else if (Character.isDigit(input.charAt(i))){                  //testing for number
    aToken += input.charAt(i);
    i++;
                if (i < input.length() && Character.isDigit(input.charAt(i))){   
                do{                                                     //loop to test for end of variable
                    aToken += input.charAt(i);
                    i++;
                }while (i < input.length() && Character.isDigit(input.charAt(i)));    //end of digit condition
            }
            tokens.add(aToken);
            i--;
        }else{
    //do nothing
        }//end if
}//end loop

return tokens;                                                      //returns tokens list to main
}//endFunction

Here is a snapshot of the output showing the NULL object in the first position:

Here is the ADTList Class. This is not all, but it does show the add(T item) method that is called by our main project:

public class ADTList<T> implements ListInterface<T>{

//defining internal variables to be used in interface class
private int numItems;
private T array[];

public ADTList(){
    //create an empty array
    array = (T[]) new Object [25];
    //assign 0 to numItems
    numItems=0;
}


public boolean isEmpty(){
// Determines whether a list is empty.
// Precondition: None.
// Postcondition: Returns true if the list is empty,
//                otherwise returns false.
    if (numItems==0){
        return true;
    }else{
        return false;
    }
}

public boolean isFull(){
// Determines whether a list is full.
// Precondition: None.
// Postcondition: Returns true if the list is full,
//                otherwise returns false.
    return numItems==array.length;
}

public int size(){
// Determines the length of a list.
// Precondition: None.
// Postcondition: Returns the number of items that are
//                currently in the list.
    return numItems;
}


public boolean add(T item){
// Adds an item to the end of list.
// Precondition: the item should be inserted in the list.
// Postcondition: If insertion is successful, it returns true,
//               item is at the end of the list,
//               Returns false if the list is full
    if (isFull()){
        return false;
    }else {
        array[numItems]=item;
        numItems++;
        return true;
    }
}

Upvotes: 0

Views: 3057

Answers (4)

Kent Luttrell
Kent Luttrell

Reputation: 15

Thank you all for the input. The error was in the printing out of the information. The get() function pulls array(position-1), therefore, we were pulling a -1 position. I do appreciate the suggestions and the code streamlining that was provided.

Upvotes: 0

Ali Hashemi
Ali Hashemi

Reputation: 3368

I think the problem is that the ADTList class makes the first member of the list null when the constructor is called. There is no problem with the code you provided.

Upvotes: 0

Ryan Maloney
Ryan Maloney

Reputation: 552

Not knowing the how ADTList is implemented (using an ArrayList internally?) if the object in the first position is an empty string then trim() the String input variable you read from the file to ensure there is no leading whitespace. If input has leading whitespace you will add an empty value to the ADTList.

Upvotes: 0

Mel Nicholson
Mel Nicholson

Reputation: 3225

Sidenote: You have several places where you write code like this:

if (big_long_test) {
    do {
        something();
    } while(big_long_test);
}

replace these with

while (big_long_test) {
    do_something();
}

The code above does not add a null to the list. Your problem is probably in the ADTList class.

Upvotes: 1

Related Questions