您好我正在编写此程序,我正在尝试弄清楚如何比较数组中的两个项目以找到最大的项目。
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()?
答案 0 :(得分:2)
它不起作用,因为int
不是Comparable
的子类,因为它甚至不是Object
。基本上,您不能将基元(int
,short
,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()
。 <
仅为基元定义。