2012-11-09 3 views
1

주어진 과제를 수행하는 데 어려움을 겪고 있습니다.Java sorted Doubly Linked List 추가 메소드

할당은 java에서 4 개의 다른 데이터 구조, LinkedList, DoublyLinked list, deque 및 sorted doublelylinked 목록을 생성하는 것입니다. 나는 정렬 된 메소드에서 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; 
    } 
} 

편집 ONE은 :

좋아, 캐스트의 일을 해결할 수 있지만, 정확히 내가 달성하기 위해 노력하고있어 도움이되지 않습니다. 애매 모호하거나 내 질문에 대해 명확하지 않은 부분에 대해 사과드립니다. 설명하기가 약간 어렵습니다. 가 나는 또한, 테스트 케이스를 많이 주어졌다 예를 들어이 하나 :

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)); 
    } 
} 

나는 내가 가진 마지막 섹션 (대신 assertEquals의에서 System.out.println을 사용)이 하나의 작업을 수행 할 때 : (- 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

대신 >을 선언해야합니다. 나는 이것이 조금 도움이되었다고 생각한다. 나는 이걸로 이상한 문제를 겪고있다. 나는 그다지 어려운 일이 아니기 때문에 오랫동안이 일을 할 필요가 없었습니다. –