2017-02-09 15 views
-2

データ構造のコースでは、このDLList Tutorialに基づいてDLListプログラムを作成しました。私は2つの関数displayWithForLoop()display()を作った。同じ出力を出すことが期待されていましたが、そうではありませんでした。何故ですか?DLList:私の関数は期待される出力を出力しません。

public class DLList<E> { 
    Node dummy, head, tail; 
    int size; 

    public DLList() { 
     size = 0; 
    } 

    class Node { 
     E element; 
     Node next; 
     Node prev; 

     public Node(E element, Node next, Node prev) { 
      this.element = element; 
      this.next = next; 
      this.prev = prev; 
     } 
    } 

    public void pushNode(E item) { 
     Node newNode = newNode(item, head, dummy); 
     if(head != null) head.prev = newNode; 
     head = newNode; 

     if(tail == null) = newNode; 
     size++; 
     System.out.println("pushing: " + element); 
    } 

    public void display() { 
     System.out.println("iterating forward..."); 
     Node pointer = head; 
     while (pointer != null) { 
      System.out.println(pointer.element); 
      pointer = pointer.next; 
     } 
    } 

    public displayWithForLoop() { 
     Node pointer = head; 
     for(int i = 0; i < size -1; i++) { 
      pointer = pointer.next; 
      System.out.println(pointer.element); 
     } 
    } 

    public static void main(String args[]) { 
     DLList<Integer> list = new DLList<Integer>(); 
     list.pushNode(15); 
     list.pushNode(25); 
     list.pushNode(35); 

     list.displayWithForLoop(); 
     System.out.println("***"); 
     list.display(); 

    } 
} 

私の出力は、次のとおりです。 pushing: 15 pushing: 25 pushing: 35 3 25 15 *** iterating forward.. 35 25 15

はなぜlist.display異なるlist.displayWithForLoop()()のために出力されますか?

答えて

1

あなたが提示した方法で出力が異なるが、あなたのdisplayWithForLoop方法がリストの先頭をスキップするように思われるのは難しいと言えます。 forループ内で2つの呼び出しの順序を入れ替えることができます。

public displayWithForLoop() { 
    Node pointer = head; 
    for (int i = 0; i < size - 1; i++) { 
     System.out.println(pointer.element); 
     pointer = pointer.next; 
    } 
} 
+0

あなたは正しいです。ああ、私はあまりにも恥ずかしい気がする。私の元のコードでは、displayWithForLoop()の直前に '3'だったリストのサイズを取得するために、関数getSize()を使用していたため、 '3'と '35'以外の理由がありました。ご親切にお世話になり、ありがとうございます。 –

関連する問題