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