我正在尝试计算并返回整数值数组的平均值。问题是,我计算平均值的数组有我需要找到的平均值和我需要排除的值。
例如,将其作为数组中的数据集。 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;
}
答案 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();