0
    import java.util.*;
    class Huffman  {
        int a;
        public Huffman(int i)
        {
            a = i;
        }               
    }

    class PriorityQueueDemo implements Comparator<Huffman>
    {
        public int compare(Huffman ab, Huffman cd)
        {
            if(ab.a>cd.a)
            {
                return 1;

            }
            return 0;
        }

        public static void main(String[] args)  
        {
            PriorityQueue<Huffman> HuffQueue = new PriorityQueue<Huffman>();

            Huffman ab = new Huffman(10);
            HuffQueue.offer(ab);
            ab = new Huffman(50);
            HuffQueue.offer(ab);
            ab = new Huffman(20);
            HuffQueue.offer(ab);
            ab = new Huffman(60);
            HuffQueue.offer(ab);


            while(HuffQueue.size() > 0)
                   System.out.println(HuffQueue.remove());

            }
    }

次のコードの何が問題になっていますか?次の例外が生成されます。

Exception in thread "main" java.lang.ClassCastException: Huffman cannot be cast to java.lang.Comparable
    at java.util.PriorityQueue.siftUpComparable(Unknown Source)
    at java.util.PriorityQueue.siftUp(Unknown Source)
    at java.util.PriorityQueue.offer(Unknown Source)
    at PriorityQueueDemo.main(Huffman.java:34)
4

2 に答える 2

4

Comparableインターフェイスを実装する必要があります

自然順序付けに依存するプライオリティ キューも、比較不可能なオブジェクトの挿入を許可しません (これを行うと、ClassCastException が発生する可能性があります)。

または、コンストラクターでコンパレーターを渡す必要があります

public PriorityQueue(int initialCapacity, Comparator<? super E> comparator)

次のように

PriorityQueue<Huffman> HuffQueue = new PriorityQueue<Huffman>(10, new Comparator<Huffman>(){

@Override
public int compare(Huffman ab, Huffman cd){
            if(ab.a>cd.a)
            {
                return 1;

            }
            return 0;
}
});
于 2012-06-15T05:18:58.820 に答える
0

例外は、Hufmannクラスが ではないComparable、 を実装していないことjava.util.Comparableを示していPriorityQueueます。比較可能にするために実装Comparableし、キューに適切な優先順位を付けます。http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.htmlで説明されており、メソッドの実装が必要です。HuffmanComparablecompareTo(T o) : int

于 2012-06-15T05:22:30.103 に答える