平均2D阵列列

时间:2019-11-10 22:27:46

标签: java arrays multidimensional-array

我正在尝试平均2D数组列。我的代码似乎将行中的数字相加,然后除以总数。在此示例中,应该只有4个分配,但它会循环12次。有人知道我的代码有什么问题吗?附言数字是从文本文件中输入的,在完整代码中位于较高位置(不确定是否会影响它)。

示例数组:

[2,3,6,7]

[4,5,6,7]

[2,2,2,2]

System.out.println("Average score of each assignment:");
    //TODO: compute and print the average on each assignment
    double total=0;
    int totallength=0;
    int assignment=1;
    for(int i=0;i<myArray.length;i++) {
        for(int j=0;j<myArray[i].length;j++) {
            total+=myArray[i][j];
            totallength++;
        System.out.println("Assignment #" + assignment++ + " Average: " + (total/totallength));
        }
    }

这是我的输出:

每项作业的平均分数:

作业1的平均值:2.0

平均分配2:2.5

作业#3平均:3.6666666666666665

作业#4平均:4.5

作业5平均:4.4

作业#6平均:4.5

作业7:平均值:4.714285714285714

作业8平均:5.0

作业#9平均:4.6666666666666667

作业10平均:4.4

作业#11平均:4.181818181818182

作业12平均:4.0

所需的输出:

作业1平均:2.6666666666

作业#2的平均值:3.333333333

作业3平均:4.6666666666

作业#4平均:5.333333333

3 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

public class Main {
    public static void main(String[] args){
        int [][]myArray= {
                {2,3,6,7},
                {4,5,6,7},
                {2,2,2,2},
        };      
        double total=0;
        int assignment=1;

        System.out.println("Average score of each assignment:");
        for(int i=0;i<myArray[0].length;i++) {
            for(int j=0;j<myArray.length;j++) {
                total+=myArray[j][i];          
            }
            System.out.println("Assignment #" + assignment++ + " Average: " + (total/3));
            total=0;
        }
    }
}

输出:

Average score of each assignment:
Assignment #1 Average: 2.6666666666666665
Assignment #2 Average: 3.3333333333333335
Assignment #3 Average: 4.666666666666667
Assignment #4 Average: 5.333333333333333

答案 1 :(得分:0)

如果要获取每一行的平均值,则需要在每个oter循环上初始化总计数器,并且还必须在求和后仅在外循环上打印:

int assignment=1;
for(int i=0;i<myArray.length;i++) {
    // initialize here, to start each row separatly
    double total=0;
    int totallength=0;
    for(int j=0;j<myArray[i].length;j++) {
        total+=myArray[i][j];
        totallength++;
    }
    // print after the loop, so it will be done only once per row
    System.out.println("Assignment #" + assignment++ + " Average: " + (total/totallength));
}

顺便说一句,更简单的计算平均值的方法是利用Java 8流功能:

for(int i=0;i<myArray.length;i++) {
  double average = Arrays.stream(myArray[i]).average().orElse(0d);
} 

答案 2 :(得分:0)

您可以使用 IntStream.average() 方法:

outcome
int m = 3;
int n = 4;
int[][] arr = {
        {2, 3, 6, 7},
        {4, 5, 6, 7},
        {2, 2, 2, 2}};
double[] averages = IntStream.range(0, n)
        .mapToDouble(i -> IntStream.range(0, m)
                .map(j -> arr[j][i])
                .average()
                .orElse(0))
        .toArray();
// output
IntStream.range(0, averages.length).forEach(i ->
        System.out.println("Assignment #" + (i + 1)
                + " Average: " + (averages[i])));