我想实现一个函数,该函数获取数组的最大值,例如double [] {1,2,3}该数组包含可以比较的元素。这是我的实现:
static <T extends Comparable> T Max( T [] arr ){
T current = arr[0];
for ( int i=1;i< arr.length;i++){
if ( arr[i] > current )
current = arr[i];
}
return current;
}
但是编译器说二进制运算符'>'中的操作数类型错误
如果(arr [i]> current)
我该如何解决?
因为T
extends Comparable
,您应该compareTo
改为使用方法,例如...
static <T extends Comparable<T>> T Max(T[] arr) {
T current = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i].compareTo(current) > 0) {
current = arr[i];
}
}
return current;
}
从JavaDocsComparable#compareTo
...
将此对象与指定对象进行比较。当此对象小于,等于或大于指定的对象时,返回负整数,零或正整数。
实现者必须确保所有x和y的sgn(x.compareTo(y))== -sgn(y.compareTo(x))。(这意味着x.compareTo(y)必须抛出异常,而y.compareTo(x)则抛出异常。)实现者还必须确保该关系是可传递的:(x.compareTo(y)> 0 && y.compareTo(z)> 0)意味着x.compareTo(z)> 0。
最后,实现者必须确保对于所有z,x.compareTo(y)== 0意味着sgn(x.compareTo(z))== sgn(y.compareTo(z))。
强烈建议(但并非严格要求(x.compareTo(y)== 0)==(x.equals(y))。一般而言,任何实现Comparable接口且违反此条件的类都应明确指出这一事实。推荐的语言是“注意:此类的自然排序与等式不一致”。
在前面的描述中,符号sgn(expression)表示数学符号函数,该函数定义为根据表达式的值为负,零还是正而返回-1、0或1中的一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句