-3
這些都爲我分配的方向就在這裏:優先級隊列和可比Assingment錯誤
使用的PriorityQueue類的對象進行排序創建應用程序。應用程序需要先按自然順序排序對象(即通過實現可比較的順序),然後再通過自定義的Comparator對象進行排序。您必須創建一個用戶定義的數據類型。
我不斷收到這個錯誤,我很困擾它。
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.
:
這是我的代碼,但不包括與設定正常的指數類和get方法。
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();
}
}
所以這將是的PriorityQueue pQueue =新的PriorityQueue (); ? –
McDodger
是的!你必須創建ComparableExponents類型的對象來插入。 –
它有我這個錯誤的所有e1,e2,e3,e4 xponentsDemo.java:33:錯誤:找不到合適的方法添加(指數) pQueue.add(e1); ^ 方法Collection.add(ComparableExponents)是不適用 (自變量不匹配;指數不能轉換到ComparableExponents) 方法AbstractCollection.add(ComparableExponents)是不適用 (自變量不匹配;指數不能轉換到ComparableExponents) – McDodger