2014-11-06 59 views
0

第二个编程类 所以我们一直负责链接列表,从头开始构建每个方法。 那么我在昨天的这一天开始,并有一个空指针的例外,我认为id后来并继续。 好了切断我的程序后,没有找到罪魁祸首即时离开与代码,应该工作,因为它从我们的实验室复制(工作)。 如果你们认为你可以弄清楚为什么即时通讯我的add方法id得到一个空指针异常非常感谢它,看看我是否正确地做第二个构造函数。如果我能够在这方面获得一些启发,它会变得更加容易,但是因为我甚至不能开始。试图让这个链表开始

你会发现的空白方法配发,病得到过他们,我可以让我的构造函数+ add方法工作

我的代码:

import java.util.Collection; 
import java.util.Iterator; 

/** 
* Created by hhhh on 11/2/2014. 
*/ 
public class Lset<R> implements Set151Interface<R> { 

    private Node head; 
    private int  length; 

    /**In the first (following) constructor im trying to re use code and call my clear method. 
    *Should save space and make code look cleaner. 
    */ 
    public Lset(){ 
     clear(); 
    } 

    public Lset(Collection<? extends R> list){ 
     this(); 
     for (R object : list) { 
      add(object); 
     } 


    } 

    /** 
    * Copied from Lab7, this add method checks to see if there are more nodes than just the head. 
    * After the check if false, creates a new node and adds it to the end of the list. 
    * @param entry 
    * @return 
    */ 
    @Override 
    public boolean add(R entry) { 
     Node newNode = new Node(entry); 

     // empty list is handled differently from a non-empty list 
     if (head.next == null) { 
      head = newNode; 
     } else { 
      Node lastNode = getNodeAt(length - 1); 
      lastNode.next = newNode; 
     } 
     length++; 
     return true; 
    } 

    @Override 
    public void clear() { 
     this.length  = 0; 
     this.head  = null; 
    } 

    @Override 
    public boolean contains(Object o) { 
     return false; 
    } 

    @Override 
    public Iterator<R> iterator() { 
     return null; 
    } 

    @Override 
    public boolean containsAll(Collection<?> c) { 
     return false; 
    } 

    @Override 
    public boolean isEmpty() { 
     return false; 
    } 

    @Override 
    public boolean remove(Object o) { 
     return false; 
    } 

    @Override 
    public boolean addAll(Collection<? extends R> c) { 
     return false; 
    } 

    @Override 
    public boolean removeAll(Collection<?> c) { 
     return false; 
    } 

    @Override 
    public boolean retainAll(Collection<?> c) { 
     return false; 
    } 

    @Override 
    public int size() { 
     return length; 
    } 

    @Override 
    public Object[] toArray() { 
     return null; 
    } 

    @Override 
    public <T> T[] toArray(T[] array) { 
     return null; 
    } 


    /** 
    * Code used in Lab 7, getNodeAt uses the length field and starts at head to traverse array and arrive at the 
    * position desired. 
    * @param position 
    * @return 
    */ 
    private Node getNodeAt(int position) { 
     assert !isEmpty() && (position >= 0) && position < length; 

     Node cNode = head; 

     for (int i = 0; i < position; i++) 
      cNode = cNode.next; 

     assert cNode != null; 
     return cNode; 
    } 


    public String toString(){ 
     String arrayString = "<"; 
     for(int i = 0; i < length; i++){ 
      String two = getNodeAt(i).toString(); 
      arrayString += two; 
      if(i <= (length - 2)){ 
       two = ", "; 
       arrayString += two; 
      } 

     } 
     arrayString += ">"; 

     return arrayString; 
    } 

    //TODO comment better 
    public class Node { 
     /** Reference to the data */ 
     public R data; 
     /** Reference to the next node is in the list */ 
     public Node next; 

     /** 
     * Sets the data for this node. 
     * @param data data to be carried by this node. 
     */ 
     public Node(R data) { 
      this.data = data; 
      this.next = null; 
     } 

     /** 
     * Sets the data for the node and assigns the next node in the list. 
     * @param data data to be carried by this node. 
     * @param nextNode next node in the list. 
     */ 
     public Node(R data, Node nextNode) { 
      this.data = data; 
      this.next = nextNode; 
     } 
     /** 
     * Returns just the data portion of the node. 
     * @return The data portion of the node. 
     */ 
     public R getData() { 
      return this.data; 
     } 
     /** 
     * Modified just the data portion of the node. 
     * @param data new data to be contained within the node. 
     */ 
     public void setData(R data) { 
      this.data = data; 
     } 

     /** 
     * What node does this node point to. 
     * @return the node that this node points to or null if it does not 
     * point anywhere. 
     */ 
     public Node getNextNode() { 
      return this.next; 
     } 

     /** 
     * Change the node that this node points to. 
     * @param nextNode a new node for this node to point to. 
     */ 
     public void setNextNode(Node nextNode) { 
      this.next = nextNode; 
     } 

     /** 
     * Display the state of just the data portion of the node. 
     */ 
     public String toString() { 
      return this.data.toString(); 
     } 
    } 



} 

这是主要的,多数民众赞成杀死它

方法
private void testConstruction() { 
     System.out.println("\nTesting Constructor"); 
     System.out.print("----------------------------------------"); 
     System.out.println("----------------------------------------"); 

     Set151Interface s = makeSet(); 
     //added 
     s.add("Butterfinger"); 
     test(s.size() == 0, 

       "size() should return 0: " + s.size()); 
     test(s.toString().equals("<>"), 
       "toString returns \"<>\": " + s.toString()); 


     ArrayList<String> temp = new ArrayList<String>(); 
     temp.add("Butterfinger"); 
     temp.add("Milky Way"); 
     temp.add("Kit Kat"); 
     temp.add("Three Muskateers"); 

     Set151Interface s3 = makeSet(temp); 
      test(s3.size() == 4, 
       "size should return 4: " + s3.size()); 
     test(s3.toString().equals("<Butterfinger, Milky Way, Kit Kat, Three Muskateers>"), 
       "toString should return\n  "+ 
         "\"<Butterfinger, Milky Way, Kit Kat, Three Muskateers>\":\n  " 
         + s3.toString()); 

    } 

尽快得到补充butterfinger尝试,我得到空指针异常指向此行 if (head.next == null) {

+2

当试图构建一个完整的库时,单元testint(Junit或TestNG)是你的朋友... – 2014-11-06 10:17:07

回答

1

你刚刚宣布private Node head;,它不接受任何值分配。所以编译器抛出NPE

+4

编译器不会抛出异常(除非编译器本身有错误)。 – immibis 2014-11-06 10:53:41

0

感谢您的帮助球员,我想通了:)。 第一天我编辑了我的驱动程序(并忘记了),一旦我复制驱动程序一切正常(迄今)再次感谢你们!