Java - 在排除特定值的同时查找数组的平均值。

时间:2017-04-30 03:20:17

标签: java arrays

我正在尝试计算并返回整数值数组的平均值。问题是,我计算平均值的数组有我需要找到的平均值和我需要排除的值。

例如,将其作为数组中的数据集。 20,-999,-10,50,-999,40,30

我需要找到平均值但从计算中排除任何-999值。

如何从我的总和中删除-999值,然后找到最后除以的新值?有没有办法记录我排除的值?如何排除值并继续下一个?

    public static double averageTemperature(int[] temperatures)
{   
    double sum = 0.0;
    double avg = 0.0;
    for (int i =0; i < temperatures.length; i++)
    {
      if (i == -999)
      {
      // what technique is there to exlude and keep counting?                   
      }
      else
      {
      sum += i;
      }
    }

    avg = sum / temperatures.length;
    return avg;
}

4 个答案:

答案 0 :(得分:3)

这应该非常简单 - 只需使用变量作为“有效”条目的计数器。您还需要正确访问数组中的值。这是一个提议(未经测试),假定“有效”条目不等于t0 -999(根据需要修改条件):

public static double averageTemperature(int[] temperatures)
{   
    double sum = 0.0;
    double avg = 0.0;
    int validEntries = 0;
    for (int i =0; i < temperatures.length; i++)
    {
        // process only "valid" entries
        if (temperatures[i] != -999)
        {
            sum += temperatures[i];
            ++validEntries;
        }
    }
    avg = sum / validEntries;
    return avg;
}

答案 1 :(得分:2)

您可以使用Java 8;

temperatures = Arrays.stream(temperatures).filter(x -> x != -999).toArray();

您可以使用predicate语句以这种方式排除任何数组值。

计算均值就像循环数组并除以长度一样简单。

 float mean;
 for (int i = 0; i < temperatures.length; ++i) {
     mean += (float) temperatures[i];
 }
 mean /= (float) temperatures.length;

注意使用float表示均值,并将整数数组值转换为float,以避免整数除法,以及length数组。

答案 2 :(得分:0)

假设你对逻辑是正确的,但你没有得到温度值的总和。

public static double averageTemperature(int[] temperatures)
     {   
         double sum = 0.0;
         double avg = 0.0;
         for (int i =0; i < temperatures.length; i++)
         {
           if (temperatures[i] == -999)
           {
               continue;
           }
           else
           {
           sum += temperatures[i];
           }
         }

         avg = sum / temperatures.length;
         return avg;
     }

希望这就是你要找的东西。

答案 3 :(得分:0)

在过滤掉任何不需要的值时计算平均值的最简单方法是:

double average = Arrays.stream(temperatures)
                       .filter(i -> i != -999)
                       .average();