2011-08-10 10 views
5

私の宿題は次のとおりです。 (二重リンクリスト)整数値を保持する二重リンクリストを実装します。リストに値[11,22,77,44,55,66,33]を入力します。リストの内容を表示します。値を奇数から最初に(後で)分ける方法を書いてください。この例では、並べ替えられたリストは[11、77、55、33、22、44、66]でなければなりません。二重リンクリストを作成できない

私はそれを働かせて、最大6つの数字のために何をしようとしているのですが、7番目の数字を追加するとエラーになります。

Exception in thread "main" java.lang.NullPointerException 
at MyList.sortData(MyList.java:100) 
at Driver.main(Driver.java:24) 



public class Driver { 

     /** 
     * @param args 
     */ 
     public static void main(String[] args) { 

      MyList<Integer> list = new MyList<Integer>(); 
      list.add(11); 
      list.add(22); 
      list.add(77); 
      list.add(44); 
      list.add(55); 
      list.add(66); 
      list.add(33); 

      System.out.println("<<Original Data>>"); 
      list.showData(); 
      System.out.println(); 

      System.out.println("<<Sorted Data>>"); 
      list.sortData(list); 
      list.showData(); 

     } 

    } 





public class MyList<E>{ 

    private Node<E> head; 
    private Node<E> tail; 
    int count; 

    public MyList(){ 
     head = null; 
     tail = null; 
     count = 0; 
    } 

    public Node<E> add(E newData){ 
     Node<E> current = new Node<E>(newData); 

     // case 1: list is empty 
     if (count == 0){ 
     count ++; 
     head = current; 
     tail = current; 
     return current; 
     } 

     // case 2: list is not empty 
     if (count > 0){ 
     count ++; 
     tail.setNext(current); 
     current.setPrior(tail); 
     tail = current; 

     return current; 
     } 
     return null; 
    } 

    public Node<E> removeFirst(){ 
     Node<E> firstNode = head; 

     if (head == tail){ 
     count = 0; 
     head = tail = null; 
     return firstNode; 
     } 
     else{ 
     head = firstNode.getNext(); 
     count --; 
     return firstNode; 
     } 
    } 

    public Node<E> removeLast(){ 
     Node<E> lastNode = tail; 
     Node<E> current = head; 

     if (head == tail){ 
     count = 0; 
     head = tail = null; 
     return lastNode; 
     } 
     else{ 
     count --; 
     tail = tail.getPrior(); 
     tail.setNext(null); 
     return lastNode; 
     } 
    } 

    public Node<E> removeAt(int index){ 
     Node<E> current = head; 
     Node<E> next = null; 
     Node<E> prior = null; 

     if (index > count) return null; 
     if (index == 0) return removeFirst(); 
     if (index == count -1) return removeLast(); 

     else{ 
     for(int i = 0; i < index; i++){ 
      current = current.getNext(); 
     } 

     next = current.getNext(); 
     prior = current.getPrior(); 
     prior.setNext(next); 
     next.setPrior(prior); 
     count--; 
     return next; 
     } 
    } 

    public void sortData(MyList<Integer> list){ 
     Node<E> current = head; 
     int key = 0; 

     while(count > 0){ 
     Node<E> data = current; 

     if((Integer)current.getData() % 2 == 0){ 
      current = (Node<E>) list.removeAt(key); 
      list.add((Integer)data.getData()); 
     } 

     else{ 
      key++; 
      current = current.getNext(); 
     } 

     count--;   
     } 
    } 

    public void showData(){ 
     Node<E> current = head; 
     System.out.print("["); 
     while(current != null){ 
     System.out.println(current.showData()); 
     current = current.getNext(); 
     } 

     System.out.print("]"); 
    } 
} 



    public class Node<E> implements Comparable<E>{ 
    private E data; 
    private Node<E> next;  
    private Node<E> prior; 

    public Node(E newElement){ 
     data = newElement; 
     next = null; 
     prior = null; 

    } 

    public Node<E> getPrior() { 
     return prior; 
    } 

    public void setPrior(Node<E> prior) { 
     this.prior = prior; 
    } 

    public E getData() { 
     return data; 
    } 

    public void setData(E data) { 
     this.data = data; 
    } 

    public Node<E> getNext() { 
     return next; 
    } 

    public void setNext(Node<E> next) { 
     this.next = next; 
    } 

    public String showData(){ 
     String result = " " + data +" "; 
     return result; 
    } 

    @Override 
    public int compareTo(E otherData) { 
     String thisData = (String) data; 
     if (thisData.compareTo((String)otherData) == 0) 
     return 0; 
     else if (thisData.compareTo((String)otherData) < 0) 
     return -1; 
     else 
     return 1; 
    } 
} 
+5

なぜこれがダウン表示されていますか?質問者はそれが宿題であり、コードを提供し、具体的な問題を認めたと認めた。それは誠実な努力のように見え、彼らは答えを手渡すように求めなかった。ダウンフォースは、人々が質問することを妨げている。 – ambagesia

答えて

3

私は通常宿題についての質問も読んでいないのは、主に「実装方法...」ですからです。しかし、例外を作ったと私はあなたの努力は、いくつかのヒントに値すると思います。

"count"メンバーフィールドを見てください。あなたは、あなたの関数の1つがそれを捨てているところで、それに頼っている関数はほとんどありません。

+0

チップをありがとう。私はそれを越えてしまった、そしてすべてが、私が数えて見る限り、そうでなければならない通りである。初期化され、必要な場所で増加し、必要な場所で減少します。私はそれが「ゴミ箱」になってどこに話すのか分かりません。明日私の教授に相談してください。おかげさまでありがとう=) – Zankorel

+1

余計なヒント:sortData()関数で何をしたいか慎重に考えてください。あなたのリストの値は、出てから何をすべきですか? – dckrooney

+0

_(両方のヒントはとてもうまくいっています:生徒の役に立つ方向)_ –

関連する問題