优先队列和可比分配错误

时间:2017-03-26 21:54:49

标签: java data-structures priority-queue comparable

这些是我在此任命的指示:

使用PriorityQueue类对对象进行排序来创建应用程序。应用程序需要首先按自然顺序对对象进行排序(即通过实现可比较),然后通过自定义的比较器对象进行排序。您必须创建用户定义的数据类型。

我一直收到这个错误并且非常坚持。

Cannot assign value of type 'Results<Car>?' to type 'Results<Object>?'

这是我的所有代码,不包括带有set和get方法的普通Exponents类。

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.
:    
 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());
    }
  }
}

1 个答案:

答案 0 :(得分:0)

使用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());
    }
}