查找泛型数组方法中的最大元素,Integer,String,Character

时间:2017-10-10 20:13:38

标签: java arrays generics conditional-operator

我有一个方法,可以很好地找到通用数组中的最小元素。但是,当我尝试相同的方法但略有不同时,每次运行它都返回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数组。

谢谢。

3 个答案:

答案 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吗?它对我来说听起来很合理,所有答案都是如此,但它们没有用。