1
import java.util.*;
public class Lab72 {
public static void main(String[] args) {
Queue que= new PriorityQueue();
que.add(new Hello(3));
que.add(new Hello(23));
que.add(new Hello(7));
que.add(new Hello(67));
que.add(new Hello(39));
System.out.println(que);
class Hello implements Comparable {
int x;
Hello(int x){
this.x=x;
}
public String toString() {
return "" + x;
}
public int compareTo(Object obj) {
if(obj instanceof Hello) {
Hello h1= (Hello)obj;
return this.x-h1.x;
}
return 0;
}
}
}
}
我在運行時收到以下錯誤:Java:使用優先級隊列和自定義類的運行時ClassCastException?
Exception in thread "main" java.lang.ClassCastException: Hello 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 java.util.PriorityQueue.add(Unknown Source)
at Lab72.main(Lab72.java:6)
6號線que.add(新的Hello(23));
構造函數的用法有什麼問題嗎?由於Hello是一個自定義類,我提供了Comparable接口,compareTo()和toString()方法都被覆蓋。
您的源不是編譯:類'Hello'是一種方法裏面,而且被聲明**後**您嘗試使用它......但是,如果我將它放在'Queue'行之前,它也會編譯並運行。結果:'[3,23,7,67,39]' –