2012-11-09 77 views
1

我一直有一些極端的困難與我已經給予的任務。Java排序雙向鏈接列表添加方法

該任務是在java中創建4​​個不同的數據結構LinkedList,DoublyLinked list,deque和排序的雙向鏈表。除了排序方法中的add方法外,我幾乎可以找到任何東西。

我一直在嘗試不同的事情約4個小時,每次我這樣做時,我所給出的測試用例都失敗了。

我張貼我目前的代碼,它不工作,我想如何。如果任何人都能通過觀察來判斷,我需要解決的問題,那就太棒了。我也可以將代碼發佈到其他方法和其他東西。 謝謝!

public void add(T item) { 
    if (head.getData() == null) { 
     head = new Node(item); 
     tail = new Node(null); 
     tail.setPrev(head); 
     head.setNext(tail); 
     count++; 
    } else if (((Comparable<T>) head.getData()).compareTo(item) >=0) { 
     Node tempNode = head; 
     head = new Node(item); 
     head.setNext(tempNode); 
     tempNode.setPrev(head); 
     count++; 

    } else { 
     Node current = head.getNext(); 
     for (int i = 1; i < size() && current.getData() != null; i++) { 
      if (((Comparable<T>) current.getData()).compareTo(item) > 0) { 
       current = current.getNext(); 
      } else if (((Comparable<T>) current.getData()).compareTo(item) <= 0) { 
       Node newNode = new Node(item); 
       current.getPrev().setNext(newNode); 
       newNode.setNext(current); 
       newNode.setNext(current.getPrev()); 
       current.setPrev(newNode); 
       count++; 
       break; 
      } 
     } 
     tail = new Node(item); 
     current.setNext(tail); 
     tail.setPrev(current); 
     count++; 
     return; 
    } 
} 

編輯一個:

好吧,我可以修復鑄件的事情,但將不完全幫助我想要完成的任務。對於我的問題含糊不清或部分不清楚,抱歉。這有點難以解釋。 我也給予了很多的測試案例,比如這一個:

public void testAddAll() { 
    SortedDLL<Integer> list = new SortedDLL<Integer>(); 
    assertEquals(0, list.size()); 

    Integer[] objects = {32,0,5125,-12}; 
    Integer[] sorted = {-12,0,32,5125}; 
    list.addAll(objects); 
    assertEquals(4, list.size()); 

    for (int i = 0; i < objects.length; i++) { 
     assertEquals(sorted[i], list.get(i)); 
    } 
} 

當我做這一個(使用的System.out.println代替的assertEquals)在最後一節中,我得到: ( - 12,-12) (0,0) (32,5125) (5125,0) 這是不完全正確的。 我只是不確定發生了什麼事。我無法發佈所有我嘗試過的解決方案,因爲我已經刪除了其中的大部分。

+0

爲了讓我們能夠幫助您,您需要告訴我們您嘗試了什麼,以及哪些方式不符合您的要求。見http://stackoverflow.com/questions/how-to-ask –

+0

你看到你沒有預料到什麼行爲?只是傾銷一些代碼不是很有幫助。什麼是不正確的工作? – Gian

+0

這不是問題,但要避免演員陣容,您必須聲明>代替 Aubin

回答

2

我發現你的代碼很難閱讀和理解。如果你發佈你的整個類,所以我們知道你的確切定義變量等

我能找到在你的代碼的邏輯錯誤這將是很好如下:

tail = new Node(item); 
    current.setNext(tail); 
    tail.setPrev(current); 
    count++; 
    return; 

這應改爲類似:

if (current == tail) { 
    tail = new Node(item); 
    current.setNext(tail); 
    tail.setPrev(current); 
    count++; 
    return; 
} 

編輯:完整的代碼已被刪除。

+0

謝謝。我認爲這有所幫助。我只是有這個奇怪的問題。我從來沒有必要花這麼長時間在一些不應該那麼困難的事情上。 –