2017-02-09 1 views
-2

데이터 구조 코스의 경우이 DLList Tutorial을 기반으로 DLList 프로그램을 만들었습니다. 나는 두 개의 함수 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 루프 내에서 두 개의 호출 순서를 바꿀 수 있습니다.

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

맞습니다. 오, 이런, 너무 당황 스럽다. 이유는 '3'과 '35'가 아닌 이유는 원래 코드에서 function getSize()를 사용하여 displayWithForLoop() 전에 '3'이었던 목록의 크기를 가져 왔기 때문입니다. 친절하게 도와 주셔서 대단히 감사합니다. –

관련 문제