2016-02-25 92 views
0

当我运行我的驱动程序类时,我的列表不会初始化。这是启动清单所必需的。初始化链表

public class SortedListReferenceBased implements ListInterface { 
    private Node head; 
    private int numItems; // number of items in list 

    public SortedListReferenceBased() 
    // creates an empty list 
    { 
     head = new Node(null); 
     numItems = 0; 

    } // end default constructor 

    public boolean isEmpty() 
    // Determines whether a list is empty 
    { 
     return true; 
    } // end isEmpty 

    public int size() 
    // Returns the number of items that are in a list 
    { 
     return numItems; 
    } // end size 

    public void removeAll() 
    // Removes all the items in the list 
    { 
     head = null; 
     numItems = 0; 

    } // end removeAll 

    public Object get(int index) throws ListIndexOutOfBoundsException 
    // Retrieves the item at position index of a sorted list, if 0 <= index < 
    // size(). 
    // The list is left unchanged by this operation. 
    // Throws an exception when index is out of range. 
    { 
     if (index < 0 || index >= numItems) { 
      throw new ListIndexOutOfBoundsException(index + " is an invalid index"); 
     } 
     return new Object(); 
    } 

    public void add(Object item) throws ListException 
    // Inserts item into its proper position in a sorted list 
    // Throws an exception if the item connot be placed on the list 
    { 
     try { 
      Node newNode = new Node(item); 
      if (head != null) { 
       int i = locateIndexToAdd(item); 
       if (i >= -1 && i <= numItems) { 
        add(i, item); 
       } 
      } else { 
       head = new Node(newNode); 
       Node curr = head.getNext(); 
       curr.setNext(null); 
       numItems++; 
      } 
     } catch (Exception e) { 
      throw new ListException("Add to List failed: " + e.toString()); 
     } 
    } 
} 
+0

“my list wont initialize”你是什么意思?你怎么看? – MartinS

+0

我有一个驱动程序类,当使用时应该在Node头放置一个单词,但它给我一个错误,说它停止在添加方法 – frenzy1272

+1

请发布堆栈跟踪 – nolexa

回答

0

这个问题似乎是你add方法的这一部分:

head = new Node(newNode); 
Node curr = head.getNext(); 
curr.setNext(null); 
numItems++; 

我承担Nodenext变量被null所以head.getNext()回报nullcurr初始化。当你打电话给curr.setNext(null)时,你会得到一个NullPointerException。由于这添加了列表中的第一个条目,因此要将第一个元素的next设置为null。 此外,您不必将newNode换成Node,因为它已经是一个节点。

head = newNode; 
head.setNext(null); 
numItems++; 

但既然你null初始化反正你没有做任何事情。

head = newNode; 
numItems++; 
+0

谢谢,我没有看到我正在调用下一个节点。 – frenzy1272