1

ノードの優先順位が頻度である、ノードの優先順位キューを作成したいと考えています。しかし、出力には最初の要素が正しい位置に含まれていません。残りはすべて正しい位置にあります。

    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

順序が b 、 a、x、c であってはなりません ありがとう。

4

2 に答える 2

5

コンパレータが間違っています。の場合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;
于 2012-09-06T12:25:44.050 に答える
2


else if (freq<n.freq) return -1;
public int compareTo(node n)に追加します

于 2012-09-06T12:24:45.750 に答える