在2D阵列中添加每列

时间:2017-03-12 19:35:29

标签: java arrays

我在添加2D数组中的每个列时遇到问题。好像我的代码没有正确添加列,因此我无法计算正确的平均值。我能够添加并获得每行的平均值,但我不知道列。我的代码中一定有一点错误,请帮我找到。

P.S。我的数组是int book [3] [4],每个学生都是专栏,所以我总共有4个学生,所以我做了专栏。

public void AverageStudent(int[][] book) //columns
{
     double average1 = 0;
     double sum1 = 0;


        for (int i = 0; i < book[0].length; i++)
        {
            for (int k = 0; k < book.length; k++)
            {
                sum1 += book[i][k];
                average1 = sum1 / book.length;
                System.out.println("The average of student " + (k+1) + " is " + average1);
                sum1 = 0;
            }
        }
}

这是上面代码的输出。

  

1 2 3 4
  1 2 3 4
  1 2 3 4
  测试1的平均值为2.5   测试2的平均值为2.5   测试3的平均值为2.5   学生1的平均值是0.3333333333333333   学生2的平均值是0.6666666666666666   学生3的平均值是1.0   学生4的平均值是1.3333333333333333

2 个答案:

答案 0 :(得分:1)

本声明中的逻辑错误:sum1 += book[i][k];

它应该是book[k][i],因为i正在对列进行迭代而k正在迭代行。

这应该适用于每栏的学生平均成绩:

       public void AverageStudent(int[][] book) //columns
       {
           double average1,sum1;

          for (int i = 0; i < book[0].length; i++)
          {     sum1 = 0;
                average1 = 0;
            for (int k = 0; k < book.length; k++)
            {
                sum1 += book[k][i];               
            }
               average1 = sum1 / book.length;
               System.out.println("The average of student " + (i+1) + " is " + average1);
          }
       }

答案 1 :(得分:-1)

您需要在第一个average1循环内声明sum1for。目前,它们在每个元素之后不断重置,理想情况下应该在每一行之后发生。下面的代码工作正常。

public void AverageStudent(int[][] book) {
    for (int i = 0; i < book.length; i++) {
        double average1 = 0;
        double sum1 = 0;
        for (int k = 0; k < book[i].length; k++) {
            sum1 += book[i][k];
        }
        average1 = sum1 / book[i].length;
        System.out.println("The average of student " + (i + 1) + " is " + average1);
        sum1 = 0;
    }
}