2016-02-29 58 views
2

我想實現我的排序方法,這需要一個通用的E[]作爲參數,在我int[]。我收到的錯誤:方法(E [])是不適用的參數(INT [])

The method sort(E[]) in the type HeapSort is not applicable for the arguments (int[]).

我的代碼如下:

public <E extends Comparable<E>> void sort(E[] array){ 

//my code 

} 

public static void main(String[] args){ 
    int[] arr = new int[30]; 
    for(int rep = 0; rep < arr.length; rep++){ 
     arr[rep] =(int)(Math.random() * 100 + 0); 
    } 

    System.out.println("The unsorted Array: "); 
    System.out.println(sort(arr).toString()); 
} 

任何想法,爲什麼我得到這個錯誤?所有幫助讚賞!謝謝!

+0

'的System.out.println(排序(ARR)的ToString());'是無效的,因爲這'排序()'方法返回'void'。 – MikeCAT

+0

錯誤消息已足夠清楚。你對此不瞭解什麼? – Raedwald

回答

4

原始類型不能替換泛型類型參數(即使它可以,也不能滿足您的extends Comparable<E>類型綁定,因爲原始類型不擴展任何類並且不實現任何接口)。

您可以int[]Integer[]取代,它會工作。

除了那個錯誤,sort(arr)不會返回任何東西,所以你不能執行toString就可以了。

您可以將其替換爲:

new HeapSort().sort(arr); // you must create an instance of the class that contains 
          // the sort method in order to call it 
System.out.println(Arrays.toString(arr)); 
+0

非常感謝大家。我現在感覺有些愚蠢,因爲這似乎是給定的。但是,我現在收到錯誤:「 - 不能對數組類型Integer []」調用sort()。謝謝你的幫助 –

+0

@ A.Takami你的排序方法應該是靜態的嗎?您的代碼嘗試從靜態上下文(主要方法)調用它,而不創建包含'sort'的類的實例。 – Eran

+0

我的排序方法不是靜態的。是的,我只是想以任何方式調用我的「排序」。當我發佈這個,並沒有真正考慮三次。從主體中調用非靜態排序的正確方法有多大? –

1

讓我們來看看你寫那裏。

public <E extends Comparable<E>> void sort(E[] array) 

這是一種稱爲排序的方法。它具有帶約束的泛型參數。約束條件是無論您輸入的通用參數是什麼,它都必須實現Comparable。

int沒有執行Comparable,實際上int沒有執行任何操作。

Java泛型完全不具有原始類型的工作。通用約束只會限制你更遠。