【问题标题】:2D Array Average (Java)二维数组平均值 (Java)
【发布时间】:2014-11-20 22:08:56
【问题描述】:

我需要这种方法来获取在其他方法中制作/更改的 2D 数组的中间列,计算每行的平均值(不包括 0 索引和最后一个索引),将该平均值放在最后一列行,然后下到下一行并重复,直到没有更多行。基本上 2 行 3 列的设置实际上将有 5 列,如下所示。

   Weight  Grade1  Grade2  Grade3  Average
  ----------------------------------------
1|  4.0     5.0     5.0     5.0    -999.0  
2|  5.0     10.0    10.0    10.0   -999.0  

该方法需要获取 Grade 分数,找到它们的平均值,然后将 -999.0 替换为平均值,然后对存在的下一行执行相同操作(大小由用户在另一种方法中输入定义)。这是我的方法代码,我知道我很接近,但我在某处犯了一些错误。

public static double[][] computeCategoryAverages(double[][] scoreArray){
    for(int i = 0; i < scoreArray.length; i++){
        double sum = 0;
        int numOfAssign = 0;
        if(i == 0){
            System.out.println("The Average for the first category: ");
            for(int j = 1; j < scoreArray[0].length-1; j++){
                sum = sum + scoreArray[0][j];
                numOfAssign++;
            }
            double average = sum / numOfAssign;

            for(int k = 0; k < scoreArray.length; k++){
                //sum = sum + scoreArray[i][j];
                //noOfAssign++;     
                scoreArray[k][scoreArray[k].length-1] = average;  
            }
        }
        else{
            System.out.println("The Average for the next category: ");
            for(int j = 1; j < scoreArray[0].length-1; j++){
                sum = sum + scoreArray[i][j];
                numOfAssign++;
            }
            double average = sum / numOfAssign;
            for(int k = 0; k < scoreArray.length; k++){
                //sum = sum + scoreArray[i][j];
                //noOfAssign++;     
                scoreArray[k][scoreArray[k].length-1] = average;  
            }
        }
    }
    return scoreArray;
}

【问题讨论】:

  • 现在的问题是什么?是否有任何错误/异常?

标签: java for-loop average multidimensional-array


【解决方案1】:

试试这个:

public static double[][] computeCategoryAverages(double[][] scoreArray){
for(int i = 0; i < scoreArray.length; i++){
    double sum = 0;
    int numOfAssign = 0;
    double average=0.0;
    System.out.printf("The Average for category:%d:",i+1);
    for(int j = 1; j < scoreArray[i].length-1; j++){
       numOfAssign++;
       sum = sum + scoreArray[i][j];

      }
    double average = sum / numOfAssign;
    scoreArray[i][scoreArray[i].length-1] = average;  

}
return scoreArray;
}

【讨论】:

    【解决方案2】:

    我无法完全理解您的代码。如果您能发表评论,那就太好了。但是我会给你一个伪代码(ish),我希望这会有所帮助。 假设: 你的数组是双

    double tempSum=0;
    
    for (int x = 0; x < amount of rows; x++)
    {
       tempSum=0;
    
       for(int y = 1(because excluding first index); y < amount of numbers - 1 (because excluding last; y++)
       {
           tempSum+= marks[x][y];
       }
       marks[x][length-1]=(tempSum/length-2) //setting the average to the last index, length -2 to account for index 0 and last one
    }
    

    然后根据需要输出

    你的代码似乎有点太复杂了=p

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      相关资源
      最近更新 更多