【问题标题】:Java adjustedAverage in array数组中的Java调整平均值
【发布时间】:2017-01-31 22:08:12
【问题描述】:

我无法在我的代码中搜索错误,我必须计算每行的平均值,而不使用不符合条件的行,具体取决于排除的百分比,例如,在下面的例子我们有 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;

在上面的示例中,percentageExcluded 为 15 %,结果必须是 6.8,但我的程序会打印 7。知道我失败的地方吗?

【问题讨论】:

  • 你需要调试你的代码。
  • 另外,请尽可能使用英文名称,因为当我看到外语变量时,我做的第一件事就是转到下一个问题。

标签: java arrays average


【解决方案1】:

嗯,这里实际上有两个问题。

您的主要问题是 Java 在处理原语时的行为。我的建议是在 int 和 double 之间的数学运算之前始终将每个 int 转换为 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;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 2015-03-29
    • 2020-09-06
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    相关资源
    最近更新 更多