【问题标题】:Find largest element in a generic array method, Integer, String, Character在通用数组方法中查找最大元素,整数,字符串,字符
【发布时间】:2018-03-22 08:38:53
【问题描述】:

我有一个方法可以很好地找到泛型数组中的最小元素。但是,当我尝试相同的方法但略有不同时,每次运行它都会返回 0。我不知道为什么。

我希望解决此问题的方法与下面的此方法相似。我不想导入 Generic.max 或使用集合,我想以更原始的方式进行,如下所示。

如何使用类似于下面的方法来找到最大值?当我尝试将 0 时,它不起作用。我怎样才能使这个 min 方法成为 max 方法?

    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

就像我说的,如果我可以使用像我的第一个方法这样的条件,那就太好了。我是泛型的新手,我试图让这些方法适用于整数、字符串和字符数组。

谢谢。

【问题讨论】:

  • maxIndex = maxIndex;...
  • 什么是 Generic.max?
  • 根据您的代码,只有一个元素的数组的最小/最大索引是什么?还有一个没有任何元素的数组?

标签: java arrays generics conditional-operator


【解决方案1】:

您将条件表达式重写为 if 语句,但没有正确执行:您想要 maxIndex = index 而不是 index = maxIndex

与其在if 的两个分支中的每次迭代中分配maxIndex,不如只在“true”分支中分配它,而完全放弃“false”分支:

for(int index = maxIndex + 1; index <= list.length -1; index++) {
    if (list[maxIndex].compareTo(list[index] ) < 0) {
        maxIndex = index;
    }
}

【讨论】:

    【解决方案2】:

    随着循环的进行,您正在重置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;
    }
    

    【讨论】:

    • 我不知道为什么,但我仍然返回 0
    • 这个 sn-p 应该可以工作。请分享您观察到的输入返回0
    【解决方案3】:

    我发现了一些终于奏效的东西。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2017-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多