如何使用do循环查找数组列表中的double值的平均值?

时间:2016-10-26 02:01:16

标签: java arrays loops average do-loops

我正在创建一个名为getAveragePrice的方法,我需要它来计算未定义数组列表中的值的平均值(只能在测试/实现所述方法时定义)。

    public double getAveragePrice() {
    double sum = 0;
    int x = 0; //counting variable
    do {

这就是我现在的开始。我知道每次将一个值加到总和上时,x的计数需要增加1,因此该方法知道将最终总和除以什么。我唯一的问题是如何设置一个do循环来给出数组列表中值的总和。

6 个答案:

答案 0 :(得分:2)

您可以使用Java 8流找到一行中的平均值:

List<Double> vals;
// initialize vals
double avg = vals.stream().mapToDouble(Double::doubleValue).sum() / vals.size();

你也可以在这里进行迭代,这是更多的工作:

double sum = 0.0;
for (double val : vals) {
    sum += val;
}

double avg = vals.size() > 0 ? sum / vals.size() : 0.0d;

答案 1 :(得分:0)

你应该遍历列表中的每个元素。

public double getAveragePrice() {
double sum = 0;
int x = 0; //counting variable
    do {
        sum += list.get(x);
        x++;
    } while (x < list.size());
int average = sum / x;
return average;
}

基本上,你开始循环为x = 0,每个循环你添加该索引的值,然后将x增加1.然后检查x是否小于元素的总数。如果是,则列表中有更多元素要添加。如果没有,那么你已经总结了所有元素。由于您添加了所有元素,因此您只需将其除以x,然后将其作为平均值返回。

答案 2 :(得分:0)

你可以将do.while条件作为:

do{
        Sum += arr[x];
        x++;
 }While(x<arr.length)

然后为avg:

Avg = sum/x

答案 3 :(得分:0)

或者你可以使用for(each)而不是do / while:

List<Double> values; // List<double> is no good apparently
double average = 0;
for (Double value : values) {
    average += value.doubleValue(); // I miss PHP ;)
}
average /= values.size();

这主要是一种风格化的东西,但我喜欢避免显式使用数组索引来访问集合(列表,数组,无论语言是什么),当你不关心元素的顺序时,不要## 39;打算改变他们中的任何一个。

这意味着你没有一个计数器/指针变量,你以后实际上不需要它(你只关心它在循环中的价值)并且你不会意外地弄乱您的原始数据(&#39; ==&#39;至&#39; =&#39;错字是经典的)。

警告:我不会写很多Java,所以也许foreach不赞成?

编辑:我没有写足够的Java来正确使用它的集合。

答案 4 :(得分:0)

Java 8无环解决方案:

myDoubleList.stream()
  .mapToDouble(Double::doubleValue)
      .average()
      .orElse(Double.NaN);

答案 5 :(得分:0)

这是21世纪。无需使用任何循环。使用Scala并编写

def exercise5(a: Array[Double]): Double = {
    a.sum / a.length
}