[英]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 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.