无法在数组中获得Second Large值

时间:2013-12-13 10:03:34

标签: java arrays search

我不明白这段代码有什么问题

    public static void main(String[] args) {
    Float[] arr = new Float[6];
    arr[0] = 8.25F;
    arr[1] = 8.25F;
    arr[2] = 8.25F;
    arr[3] = 0.0F;
    arr[4] = 0.0F;
    arr[5] = 0.0F;

    secondHighest(arr);

}

public static float secondHighest(Float[] arr) {
    float largest = arr[0];
    float secondLargest = Float.NEGATIVE_INFINITY;
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] > largest) {
            secondLargest = largest;
            largest = arr[i];

        } else if (arr[i] > secondLargest) {
            secondLargest = arr[i];
        }
    }
    System.out.println(secondLargest);
    return secondLargest;
}

打印8.25是最大值。而不是0.0

更新 我不想使用任何集合类。因为我不想改变数组元素的顺序。 如果所有输入都相同,我的方法应返回0.0 (这是float的默认值)作为输出。

4 个答案:

答案 0 :(得分:4)

如果该值不大于之前的最大值,那么在设置第二大值之前,您不会检查它是否等于之前的最大值:

    public static float secondHighest(Float[] arr) {
        float largest = arr[0];
        float secondLargest = Float.NEGATIVE_INFINITY;
        boolean foundSecondLargest = false;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > largest) {
                secondLargest = largest;
                largest = arr[i];
                foundSecondLargest = true;
            } else if ( arr[i] != largest && arr[i] > secondLargest) {
                secondLargest = arr[i];
                foundSecondLargest = true;
            }
        }
        if ( !foundSecondLargest )
            secondLargest = 0.0F;
        System.out.println( String.format("%.2f", secondLargest ) );
        return secondLargest;
    }

修改

添加了一项检查,看是否找不到第二个最大值,如果是,则返回0.0F

答案 1 :(得分:3)

你为什么不这样做:

Float[] arr = new Float[6];
arr[0] = 8.25F;
arr[1] = 8.25F;
arr[2] = 8.25F;
arr[3] = 0.0F;
arr[4] = 0.0F;
arr[5] = 0.0F;
List<Float> list = Arrays.asList(arr);
Collections.sort(list);
Float secondLargest = Float.NEGATIVE_INFINITY;
if (list.size() > 1) { 
    secondLargest = list.get(1)
}

如果您不想使用任何集合实用程序类,则可以(冒泡)对数组进行排序并返回第二个元素。

答案 2 :(得分:3)

这里的许多答案都建议对数据集进行排序并获得第二个元素。这是一个很酷的解决方案,因为你可以用几行来解决你的问题。如果你有一个庞大的数据集会发生什么?在这种情况下,这些解决方案会不必要地增加您的代码时间复杂度。

你的问题是你有重复的值,所以你的第二大值也是8.25。

您应该更改“else-if”条件,以便第二大条件不能等于最大值。

答案 3 :(得分:2)

试试这个:

 Arrays.sort(arr);
 System.out.println(arr[1]);