繁体   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