2011-10-31 47 views
0

我需要在泛型一點幫助下面的代碼:處理這個泛型錯誤

public <T extends Comparable<T>> int insertionSort(T[] a) { 
    // throw new RuntimeException("not implemented"); 
     final int L = a.length; 
     int compares = 0; 

     for(int i = 1; i < L; i++){ 
      for(int j = i; j > 0 && a[j].compareTo(a[j - 1]) < 0; j--){ 

       Comparable tmp = a[j]; // PROBLEM HERE 
       a[j] = a[j - 1]; 
       a[j - 1] = tmp;  // PROBLEM HERE 

       compares++; 
      } 
     } 

    return compares; 
    } 

//問題就在這裏 這兩行代碼是錯,需要幫助修復它們。

感謝

編輯

的錯誤是我無法進行指派

+0

有什麼錯誤? – birryree

+0

你看到什麼症狀會導致你相信有問題? –

+0

錯誤是我不能做任務 –

回答

1

您的問題是Comparable是一個接口,而不是一個類。你需要創建一個實現了Comparable的類的對象。

如果T工具Comparable,比你可以聲明TMP爲T和使用:

T tmp = a[j]; 
a[j] = a[j - 1]; 
a[j - 1] = tmp; 
+0

感謝您的回答。它的工作原理 –

0

而非可比tmp中,請使用t和tmp應該修復它,我認爲。

+0

感謝您的回答。 –

2

a[j]T而不是Comparable

您只能將它放入類型爲T的變量中。

+0

感謝您的回答。 –

0

需要注意的事項記在你的代碼:

  • 你的T的定義是遞歸的。如果需要,可以制定一個界面。
  • 你的任務是錯誤的,編譯器明確指出! :-)

    Comparable tmp = a [j];

這會起作用,因爲這是真實和正確的。由於T延伸可比較,T is-a可比。

a[j - 1] = tmp; 

這是行不通的,因爲您試圖將超類實例分配給子類實例。可比較不保證有T行爲。因此錯誤。

你可以嘗試和參數化你的類,在這個函數所在。使用該參數來定義T.再次,您可能需要使用接口。除非我們更瞭解其他相關的設計目標,否則很難提供建議。明智的代碼,錯誤是正確的和合理的。