Java调整数组中的平均值

标签 java arrays average

我在寻找代码中的错误时遇到了麻烦,我必须计算每行的平均值,而不使用不符合条件的行,具体取决于排除的百分比,例如,在下面的示例中,我们有 9 行。如果我们排除 15%,则意味着我们必须丢弃第一行和最后一行。

int [][] m={// row average
{1,3,1,3}, //2
{5,6,7,8,9},// 7
{7},//7
{6,7,6,7},//6.5
{6,5,6,5},//5.5
{9,9},//9
{4,4,3,8,6},// 5
{400,4}, //202
{8,8,6,8,10}};//8

// average of row averages 28.0 (not adjusted)
// adjusted average depends on percentage excluded

这只是一个数组示例。

public static double adjustedAverage (int[][] m,int percentageExcluded){

double average[]= new double[m.length];
double excluded = m.length*percentageExcluded/100.;
double suma=0;
double cantidad=0;
double averageResult;

//creamos un array con las medias de cada fila
for (int fila=0; fila < m.length;fila++){

  int rowTotales=0;
  for (int columna=0; columna <m[fila].length;columna++){

    rowTotales += m[fila][columna];
  }

  average[fila]= rowTotales / m[fila].length;  
}

这部分我已经知道是正确的,我创建了一个新数组,其中包含每行的平均值。

//ordenamos el array
Arrays.sort(average);

在这一部分中,我命令数组排除最大和最低平均值

//Calculamos la nueva media excluyendo los que no cumplen las condiciones
for (int columna=0;columna < average.length;columna++){

  if (columna>=excluded && columna<=average.length-(excluded)){suma=suma+average[columna];
    cantidad++;}
}

averageResult = suma/cantidad;
 System.out.println("La mediana ajustada es"+averageResult);
return averageResult;

在上面的示例中,百分比排除为 15 %,结果必须是 6.8,但我的程序打印出 7。知道我失败在哪里吗?

最佳答案

嗯,你实际上有两个问题。

您的主要问题是 Java 在处理原语时的行为。我的建议是在 int 和 double 之间进行数学运算之前,始终将每个 int 转换为 double 。如果您的方程中只有整数并且期望结果为 double ,那么这也是必要的!

请查看您的代码。我已经添加了缺少的类型转换。

解决了这个问题就会导致第二个问题。因为启动此代码表明,您丢弃了 9 行中的 3 行,而不是 9 行中的 2 行。您必须调整方式以删除正确数量的行,具体取决于您在描述中提到的百分比。

只需按原样运行代码并查看控制台中的输出即可。您期望总和为 48,但实际只有 43。

祝你好运! ;)

public static void main (String args[])
{
    int [][] m={// row average
            {1,3,1,3}, //2
            {5,6,7,8,9},// 7
            {7},//7
            {6,7,6,7},//6.5
            {6,5,6,5},//5.5
            {9,9},//9
            {4,4,3,8,6},// 5
            {400,4}, //202
            {8,8,6,8,10}};//8

    adjustedAverage(m, 15);

}

public static double adjustedAverage (int[][] m,int percentageExcluded){

    double average[]= new double[m.length];
    double excluded = ((double)m.length * (double)percentageExcluded) / 100.00; // <<<<< cast int to double
    double suma=0;
    double cantidad=0;
    double averageResult;

    // <<<<< the value of excluded (just for debugging purposes)
    System.out.println("excluded: " + excluded);


    //creamos un array con las medias de cada fila
    for (int fila=0; fila < m.length;fila++){

      double rowTotales = 0; 

      for (int columna=0; columna <m[fila].length;columna++){

        rowTotales += (double)m[fila][columna]; // <<<<<< cast int to double
      }

      average[fila]= rowTotales / (double)m[fila].length; // <<<<<< cast int to double
    }

    //ordenamos el array
    Arrays.sort(average);

    // the list of averages (just for debugging purposes)
    System.out.println("List of averages: ");
    for(int i=0; i<average.length; i++)
    {   
    System.out.println(average[i]);
    }

    //Calculamos la nueva media excluyendo los que no cumplen las condiciones
    for (int columna=0;columna < average.length;columna++){

      if (columna>=excluded && (columna<=average.length-excluded))
      {
          // <<<<< every relevant average (just for debugging purposes)
          System.out.println("relevant average for 'suma': " + average[columna]);

          suma += average[columna];
          cantidad++;
      }
    }

    // <<<<< the sum of all relevant averages (just for debugging purposes)
    System.out.println("Suma: " + suma);

    averageResult = suma/cantidad;
    System.out.println("La mediana ajustada es " + averageResult);

    return averageResult;

}

关于Java调整数组中的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968385/

相关文章:

c - 多维数组越界访问

javascript - 更改一个索引位置处的数组值也会更改其他位置处的值

hadoop - Hive脚本-如何根据一列名称转换表/查找某些记录的平均值?

Python - 当年 3 个月移动平均线

java - 如何在没有uri的情况下将查询传递给rest模板中的url

java - 每个节点有多个 child 的树的搜索方法

arrays - 在 UNIX 中使用数组将文件动态传递给命令

postgresql - 基于 PostgreSQL 中 10 分钟间隔的测量的时态数据库的平均聚合

java - 如何在无需用户输入的情况下在我的排队系统上添加自动 ID 号?

java - 将 POI 工作簿流式传输到 servlet 输出流