优先队列和可比分配错误

问题描述 投票:-3回答:1

这些是我在这里的任务指示:

使用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();
    }
}
java data-structures priority-queue comparable
1个回答
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());
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.