2014-10-16 6 views
0

현재 내 우선 순위 큐에 문제가 있습니다. 내 메서드를 테스트 할 때 내 큐가 최우선 순위를 반환하지 않는다는 오류가 발생합니다. 나는 단계별로 설문 조사 또는 제안 방법이이 문제를 일으키는 이유를 알 수 없습니다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다우선 순위 큐 구현에 문제가 발생했습니다. Java

public class HeapArrayQueue <E extends Comparable<? super E> > extends AbstractQueue <E> { 

@SuppressWarnings("unchecked") 
private E[] data = (E[])(new Comparable[7]); 
private int count = 0; 
private int front = 0; 
public int size() { 
    return count; 
} 

public boolean isEmpty() { 
    return size() == 0; 
} 

public E poll() { 
    if (isEmpty()) 
     return null; 
    else { 
     E ans = data[front ]; 
     front = (front+1);  
     return ans; 
    } 
} 


public boolean offer(E element) { 
    if (element == null)return false; 
    else { 
     ensureCapacity(); 
     data[count] = element; 
     bubbleUpFromIndex(count); 
     count++; 
     return true; 
    } 
} 

private void bubbleUpFromIndex(int nodeIndex) { 
    if (nodeIndex != 0){ 
     int parent = (nodeIndex -1)/2; 
     if (data[nodeIndex].compareTo(data[parent]) > 0){ 
      swap(nodeIndex, parent); 
      bubbleUpFromIndex(parent); 
     } 
    } 
} 

private void swap(int from, int to) { 
    E temp = data[from]; 
    data[from] = data[to]; 
    data[to] = temp; 
} 

private void ensureCapacity() { 
    if (count == data.length) { 
     @SuppressWarnings("unchecked") 
     E[] newData = (E[])new Comparable[data.length * 2]; 

     for (int loop = 0; loop < count; loop++) { 
      newData[loop] = data[loop]; 
     } 
     data = newData; 
    } 
    return; 
} 

public Iterator<E> iterator() { 
    return null; 
} 
} 

나는 그것을 받아 피해자에 comp103을하는 테스트

@Test 
public void QueueRespectsPriority() { 
    nonEmptyQueue.offer(t1); 
    assertEquals("Queue should return element with highest priority", t1, nonEmptyQueue.poll()); 
} 
+0

@Duncan 추가 테스트 – M0rty

+0

t1 유형은 equals 메소드를 대체합니까? – JamesB

+0

t1은 comparable을 구현하는 객체입니다. 나는 equals 메소드를 오버라이드한다고 생각하지 않는다. – M0rty

답변

1

실패? 내가 지금하고있는 것과 매우 흡사합니다.

내가 볼 수있는 첫 번째 점은 설문 조사에서 올바른 우선 순위를 유지하지 않는다는 것입니다. 다음은 할 필요가 > 당신의 bubbleUpFromIndex 방법에서

public E poll(){ 
if (count = 0) return null 
E item = root // We are returning the root node so store it as a var 
root = end  // place the end item in root position 
end = null  // set end item to null 
count--   // subtract count 
sinkDown(0)  // Call sink down to restore ordering 
return item  // return item 
} 
0

, 당신보다 큼 기호 (의사 코드 내 방법)보다 작음 기호 <. 그리고 다른 응답에서 poll 메소드를 사용해야합니다. 그러면 작동 할 것입니다.