2012-09-06 4 views
1

노드의 우선 순위가 빈도 인 노드의 우선 순위 대기열을 만들고 싶습니다. 그러나 출력에는 올바른 위치의 첫 번째 요소가 포함되지 않습니다. 나머지는 모두 올바른 위치에 있습니다.Java 문제의 우선 순위 대기열 순서 지정

import java.util.*; 
class node implements Comparable<node>{ 
     char key; 
     int freq; 
     node(){} 
     node(char k,int f){ 
       key=k; 
       freq=f; 
     } 
    public int compareTo(node n){ 
      if(freq>n.freq)return 1; 
      return 0; 
     } 
} 

public class test{ 
    public static void main(String[] args){ 
     node x=new node('x',4); 
     node a=new node('a',2); 
     node b=new node('b',1); 
     node c=new node('c',7); 
     PriorityQueue<node> q = new PriorityQueue<node>(); 

     q.offer(a); 
     q.offer(b); 
     q.offer(c); 
     q.offer(x); 

     while(!q.isEmpty()){ 
      node d=q.poll(); 
      System.out.println(d.key+" "+d.freq); 
     } 
    } 
} 

출력 :

a 2 
    b 1 
    x 4 
    c 7 

는 주문이 감사합니다 C, A, X, ㄱ 할 수 없습니다.

답변

5

귀하의 비교가 잘못 공공 INT은 compareTo (n 노드)에
else if (freq<n.freq) return -1;
를 추가 freq < n.freq, 그것은 음수를 반환하는 대신 0을 반환합니다.

코드는

return Ints.compare(freq, n.freq); // with Guava 

또는

return Integer.valueOf(freq).compareTo(Integer.valueOf(n.freq)) // with plain Java 

또는

if (freq > n.freq) return 1; 
if (freq < n.freq) return -1; 
return 0; 
+0

다음 O를 반환의 필요성은 무엇이어야 하는가? – Jignesh

+1

객체가 같다고 생각 될 때, 즉 주파수가 동일 할 때 0이 반환됩니다. –