我有一个方法,可以很好地找到通用数组中的最小元素。但是,当我尝试相同的方法但略有不同时,每次运行它都返回0.我不知道为什么。
我希望解决此问题的方法看起来与下面的方法一样接近。我不想导入Generic.max或使用集合,我想以更原始的方式进行,如下所示。
如何使用类似下面这个方法找到最大值?当我试图改变< 0到> 0它不起作用。我怎么能让这个min方法成为最大方法?
public static <E extends Comparable<E> > int getSmallesElement(E[] list) {
int minIndex = 0;
// Iterate from i+1 ti i-1
for (int index = minIndex + 1; index <= list.length - 1; index++) {
minIndex = (list[index].compareTo(list[minIndex]) < 0 )? index : minIndex;
}// end for
return minIndex;
}// end getSmallest method
就像我说的,如果我可以像我的第一种方法一样使用条件,这将是很棒的。我是泛型的新手,我试图让这些方法适用于Integer,String和Character数组。
谢谢。
答案 0 :(得分:0)
您将条件表达式重写为if
语句,但未正确执行:您需要maxIndex = index
而不是index = maxIndex
。
不是在maxIndex
的两个分支中的每次迭代上分配if
,而是只能在“true”分支中分配它,并完全删除“false”分支:
for(int index = maxIndex + 1; index <= list.length -1; index++) {
if (list[maxIndex].compareTo(list[index] ) < 0) {
maxIndex = index;
}
}
答案 1 :(得分:0)
您在循环播放时重置index
,而不是仅设置maxIndex
:
public static <E extends Comparable<E> > int getLargestElement(E[] list) {
int maxIndex = 0;
for(int index = 1; index <= list.length -1; index++) {
if (list[index].compareTo(list[maxIndex] ) > 0) {
maxIndex = index;
}
}
return maxIndex;
}
答案 2 :(得分:-1)
我找到了最终有效的东西。
public static <E extends Comparable<E> > E getLargestElement(E[] list) {
E max = list[0]; // set first value in array as current max
for(int i = 1; i < list.length; i++) {
if(list[i].compareTo(max) > 0 ) {
max = list[i];
}
}// end for
return max;
}
有人可以向我解释为什么其他答案和我试图使用的方法一直返回0吗?它对我来说听起来很合理,所有答案都是如此,但它们没有用。