2017-03-26 51 views
-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(); 
    } 
} 

回答

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()); 
    } 
} 
+0

所以這將是的PriorityQueue pQueue =新的PriorityQueue (); ? – McDodger

+0

是的!你必須創建ComparableExponents類型的對象來插入。 –

+0

它有我這個錯誤的所有e1,e2,e3,e4 xponentsDemo.java:33:錯誤:找不到合適的方法添加(指數) pQueue.add(e1); ^ 方法Collection.add(ComparableExponents)是不適用 (自變量不匹配;指數不能轉換到ComparableExponents) 方法AbstractCollection.add(ComparableExponents)是不適用 (自變量不匹配;指數不能轉換到ComparableExponents) – McDodger