簡體   English   中英

查找數組中元素的最小值,最大值和平均值

[英]Finding min, max and average of elements in an Array

我試圖在數組中找到存儲為雙精度的最小和最大數字。 這是數組:

double[] heightArray = {1.4,1.9,1.31,1.2};

在嘗試找到最小和最大的元素時,我使用了以下方法:

public static void studentHeights(double[] heightArray) {
    double total = 0;
    double average;
    double maximum = 0;
    double minimum = 0;

    for (int loop = 0; loop < heightArray.length; loop++) {
        System.out.println(heightArray[loop]);
        total += heightArray[loop];
        if (heightArray[loop] > maximum) {
            maximum = heightArray[loop];
        }
        if (heightArray[loop] < minimum) {
            minimum = heightArray[loop];
        }

    }
    average = total / heightArray.length;
    System.out.println("The maximum height is: " + maximum);
    System.out.println("The minimum height is: " + minimum);
    System.out.println("The average height is: " + average);

}

控制台輸出:

1.4
1.9
1.31
1.2
The maximum height is: 1.9
The minimum height is: 0.0
The average height is: 1.4525

最大(最大)元素是正確的,平均值也是正確的。 但是,最小(最小)元素記錄為0.0 這必須是因為沒有一個元素小於0,但我想不出如何以另一種方式計算最小元素。

將最小值設置為非常大而不是0

double minimum = 0;

如最大可能值,方便地定義為常數

double minimum = Double.MAX_VALUE;

初始化最大值時,您可能希望使用MIN_VALUE

double maximum = Double.MIN_VALUE;

您可以使用數組的第一個元素而不是值0初始化最小變量,

例如

double minimum = heightArray[0];

如果數組中有負數,則最大邏輯將無法正常工作,請考慮初始化最大變量

double maximum = heightArray[0];

如果您對替代方法感興趣,可以使用Collections.max()Collections.min()執行此任務:

List<Double> lst = Arrays.asList(heightArray); // array to list
System.out.println(Collections.min(lst)); // print max value
System.out.println(Collections.max(lst)); // print min value
System.out.println(lst.stream().mapToDouble(e->e.doubleValue()).average().getAsDouble()); //average

為什么Collections.max()Collections.min() 因為它可以用於任何類型的原始或包裝類對象。

鏈接:

在Java 8中更容易,您可以選擇多種選擇

選項1

double max = Arrays.stream(heightArray).max().getAsDouble();
double min = Arrays.stream(heightArray).min().getAsDouble();
double avg = Arrays.stream(heightArray).average().getAsDouble();

選項2

你可以使用DoubleStream.of(double ... values)

double max = DoubleStream.of(heightArray).max().getAsDouble();
double min = DoubleStream.of(heightArray).min().getAsDouble();
double avg = DoubleStream.of(heightArray).average().getAsDouble();

選項3

您可以使用DoubleSummaryStatistics

DoubleSummaryStatistics stats = DoubleStream.of(heightArray).summaryStatistics();

double min = stats.getMin();
double max = stats.getMax();
double avg = stats.getAverage();

或者您可以sort()數組進行sort()

// Initialize unsorted double array.
double HeightsArray[] = {1.4, 1.9, 1.31, 1.2};

// Sorting the array.
Arrays.sort(HeightsArray);

System.out.println("Smallest number: " + HeightsArray[0]);
System.out.println("Largest number: " + HeightsArray[HeightsArray.length - 1]);

將輸出:

Smallest number: 1.2
Largest number: 1.9

正如您已經確定的那樣,問題在於您希望以比數組中任何其他值更大的值開始迭代。 理想情況下,我們會與現有的存儲的最大值開始double 幸運的是,我們只有這樣一個值: Double.MAX_VALUE

同樣,您可以將最大搜索更改為以- Double.MAX_VALUE開頭,以便在傳遞完全負數列表時您的函數繼續工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM