2012-12-01 66 views
1

我在Java中實現了一個MaxHeap,它是根據其關鍵字排序的。每個鍵也與一個值相關聯。當我嘗試運行我的程序我得到一個異常:Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [LMaxHeap$Obj;使用Key,Value Pair實現MaxHeap

編輯唯一的例外是在這條線拋出:o = (Obj[])new Object[n+1];

我怎麼去解決我的問題呢?

這裏是我的代碼:

public class MaxHeap<Key,Value> { 

    Obj [] o; 
    int N; 
    int size; 
    private Comparator<Key> comparator; 

    public MaxHeap(int n){ 
     o = (Obj[])new Object[n+1]; 
     size =0; 
     N = n; 
    } 

    public class Obj{ 
     Key k; 
     Value v; 

     public Obj(Key k, Value v){ 
      this.k = k; 
      this.v = v; 
     } 
    } 


void push(Key k, Value v) { 
     Obj temp = new Obj(k,v); 
     o[++size] = temp; 
     swim(size); 
    } 

Obj pop() { 
    Obj del = o[1]; 

    Obj temp = o[1]; 
    o[1] = o[size]; 
    o[size--] = temp; 

    sink(1); 
    return del; 
} 

boolean isLess(int i, int j){ 
    return ((Comparable<Key>) o[i].k).compareTo(o[j].k) < 0; 
    } 

void swim(int index){ 
    Obj temp; 
    while(index > 1 && isLess(index/2,index)){ 
      temp = o[index]; 
      o[index] = o[index/2]; 
      o[index/2] = temp; 

      index = index/2; 
     } 
    } 

void sink(int index){ 
    int i; 
    Obj temp; 
    while(2*index <= size){ 
     i = 2*index; 
     if(i < size && isLess(i, i+1)) 
      i++; 
     if(!isLess(index,i)) 
      break; 
     temp = o[index]; 
     o[index] = o[i]; 
     o[i] = temp; 

     index = i; 
     } 
    } 

} 

回答

0

看看例外,它會給一個行號。看看你在從哪裏投射。在投射之前,您可以使用instanceof運算符進行測試。

+0

我做了一個編輯,並在我的問題中添加了異常行 –

+0

對象正在轉換爲obj。我猜obj是你創建的類型。 –

+0

是的。我嘗試了o = new Obj [n + 1],但是這給了我一個編譯錯誤 –

相關問題