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;
}
}
}
}
我在运行时遇到以下错误:
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(new Hello(23));
构造函数的使用有什么问题吗?由于Hello是一个自定义类,我提供了Comparable接口,compareTo()和toString()方法都被重写。
答案 0 :(得分:3)
你不应该使用原始类型。
尝试:
class Hello implements Comparable<Hello>
{
int x;
Hello(int x){
this.x=x;
}
public String toString() {
return ""+x;
}
public int compareTo(Hello obj) {
return this.x-obj.x;
}
}
同时更改
Queue que= new PriorityQueue();
到
Queue<Hello> que= new PriorityQueue<Hello>();