有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java平均二维数组列

我试图平均一个二维数组列。我的代码似乎是将行中的数字相加,然后除以总数。在这个例子中,应该只有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));
    }
}

以下是我的输出:

Average score of each assignment:
Assignment #1 Average: 2.0
Assignment #2 Average: 2.5
Assignment #3 Average: 3.6666666666666665
Assignment #4 Average: 4.5
Assignment #5 Average: 4.4
Assignment #6 Average: 4.5
Assignment #7 Average: 4.714285714285714
Assignment #8 Average: 5.0
Assignment #9 Average: 4.666666666666667
Assignment #10 Average: 4.4
Assignment #11 Average: 4.181818181818182
Assignment #12 Average: 4.0

期望输出:

Assignment #1 Average: 2.666666666
Assignment #2 Average: 3.333333333
Assignment #3 Average: 4.666666666
Assignment #4 Average: 5.333333333

共 (3) 个答案

  1. # 1 楼答案

    您可以使用^{}方法:

    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])));
    
    Assignment #1 Average: 2.6666666666666665
    Assignment #2 Average: 3.3333333333333335
    Assignment #3 Average: 4.666666666666667
    Assignment #4 Average: 5.333333333333333
    
  2. # 2 楼答案

    您可以按如下方式操作:

    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
    
  3. # 3 楼答案

    如果要获得每行的平均值,则需要初始化每个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);
    }