这些是我在这里的任务指示:
使用PriorityQueue类对对象进行排序来创建应用程序。应用程序需要首先按自然顺序对对象进行排序(即通过实现可比较),然后通过自定义的比较器对象进行排序。您必须创建用户定义的数据类型。
我一直收到这个错误并且非常坚持它。
Exception in thread "main" java.lang.ClassCastException: Exponents cannot be cast to java.lang.Comparable
at java.util.PriorityQueue.siftUpComparable(PriorityQueue.java:652)
at java.util.PriorityQueue.siftUp(PriorityQueue.java:647)
at java.util.PriorityQueue.offer(PriorityQueue.java:344)
at java.util.PriorityQueue.add(PriorityQueue.java:321)
at ExponentsDemo.main(ExponentsDemo.java:34)
----jGRASP wedge2: exit code for process is 1.
----jGRASP: operation complete.
:
这是我的所有代码,不包括带有set和get方法的普通Exponents类。
import java.util.PriorityQueue;
//import java.util.Comparable;
public class ExponentsDemo
{
public static void main(String []args)
{
Exponents e1 = new Exponents(2,3);
Exponents e2 = new Exponents(5,2);
Exponents e3 = new Exponents(4,3);
Exponents e4 = new Exponents(6,5);
PriorityQueue<Exponents> pQueue = new PriorityQueue<Exponents>();
pQueue.add(e1);
pQueue.add(e2);
pQueue.add(e3);
pQueue.add(e4);
while (!pQueue.isEmpty()) {
System.out.println(pQueue.poll());
}
}
}
public class ComparableExponents extends Exponents implements Comparable<ComparableExponents>
{
public ComparableExponents(int num, int exponent)
{
super(num, exponent);
}
public int compareTo(ComparableExponents exp)
{
if(getExponent() > exp.getExponent())
//{System.out.println(1);}
return 1;
else if(getExponent() < exp.getExponent())
//{System.out.println(-1);}
return -1;
else
return 0;
}
public String toString()
{
return super.toString() + "/n Your exponent is: " + getExponent();
}
}
使用ComparableExponents作为优先级队列的类型,并创建ComparableExponents的对象以插入PriorityQueue。
public static void main(String[] args) {
ComparableExponents e1 = new ComparableExponents(2, 3);
ComparableExponents e2 = new ComparableExponents(5, 2);
ComparableExponents e3 = new ComparableExponents(4, 3);
ComparableExponents e4 = new ComparableExponents(6, 5);
PriorityQueue<ComparableExponents> pQueue = new PriorityQueue<ComparableExponents>();
pQueue.add(e1);
pQueue.add(e2);
pQueue.add(e3);
pQueue.add(e4);
while (!pQueue.isEmpty()) {
System.out.println(pQueue.poll());
}
}