2011-10-14 82 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 - 我回答了这个问题,但通常在这个网站上的每个问题应该是一个问题。如果您有更多问题,请打开一个新问题。你会以这种方式更快地得到答案(我认为没有人回答这个是因为他们认为我已经有了)。 –