2011-10-14 85 views
0

你好我正在寫這個程序,我想弄清楚如何比較數組中的兩個項目來找到最大的項目。在AnyType數組中尋找最大

public static <T extends Comparable< ? super T>> T getLargest(T [] a, int low, int high){ 
    if(low>high) 
      throw new IllegalArgumentException(); 
    T[] arrCopy = (T[]) new Object[high-low] 
    for(int i=low;i<high;i++){ 
     if(a[i]>a[i+1]) 
      arrCopy[i]=a[i]; 
     else 
      arrCopy[i]=a[i+1]; 
    } 
    return arrCopy[0]; 
} 

但是當時我不知道如何來測試它,我想:

T[] a = {1,12,7,45,22,23,5}; 
    System.out.println("Array: [1,12,7,45,22,23,5] low=0 high, Largest?: " + rec.getLargest(a, 0, 6)); 

,但我得到一個錯誤信息

的方法getLargest(T [], int,int)類型Rec不適用於參數(int [],int,int)

如何將它稱爲m讓它成爲一組數字?字符串數組是否可以用於獲取最大的代碼?

也許只是簡單的答案,但我一直在整個程序上工作了一段時間,現在看起來並不那麼清楚。

EDIT

從int []改變陣列整數[]後。我在這一行if(a[i]>a[i+1])

運營商得到一個錯誤>是未定義的參數類型T,T

我假設我將不得不在>符號更改爲比較數組中的元素,但我該如何做到這一點?使用compareTo()?

回答

2

這不起作用,因爲int不是Comparable的子類,因爲它甚至不是Object。基本上,您不能使用泛型的基元(intshort,long,char,boolean,byte)。

嘗試使用Integer的數組調用它。

Integer[] a = {1,12,7,45,22,23,5}; 
System.out.println("Array: [1,12,7,45,22,23,5] low=0 high, Largest?: " + rec.getLargest(a, 0, 6)) 

如果你想你的方法,以能夠接受int[],你需要對你要接受每一個(int getLargest(int[], int, int)char getLargest(char[], int, int)等),一個單獨的函數。

編輯:

在回答您的編輯,你需要使用compareTo()<僅針對基元定義。

+0

好的,完美的,工作,非常感謝你 – randomizertech

+0

現在我得到另一個錯誤。請參閱編輯。 – randomizertech

+0

@ fgualda87 - 我回答了這個問題,但通常在這個網站上的每個問題應該是一個問題。如果您有更多問題,請打開一個新問題。你會以這種方式更快地得到答案(我認爲沒有人回答這個是因爲他們認爲我已經有了)。 –