在AnyType数组中查找最大

时间:2011-10-14 22:38:55

标签: java arrays get

您好我正在编写此程序,我正在尝试弄清楚如何比较数组中的两个项目以找到最大的项目。

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));

但是收到错误消息

  

Rec类型中的方法getLargest(T [],int,int)不适用于参数(int [],int,int)

如何调用它来使其成为一组数字?一组字符串是否与我获得最大的代码一起工作?

也许只是简单的答案,但我已经在整个程序上工作了一段时间,现在看起来并不那么清楚。

修改

将数组从int []更改为Integer []。我在这一行if(a[i]>a[i+1])

时收到错误
  

运营商&gt;未定义参数类型T,T

我假设我必须更改>符号以比较数组中的元素,但我该怎么做?使用compareTo()?

1 个答案:

答案 0 :(得分:2)

它不起作用,因为int不是Comparable的子类,因为它甚至不是Object。基本上,您不能将基元(intshortlongcharbooleanbyte)与泛型一起使用。

尝试使用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()<仅为基元定义。