【问题标题】:JAVA how would I calculate the sum of each row in a 2 dimensional array?JAVA如何计算二维数组中每一行的总和?
【发布时间】:2018-08-30 14:03:28
【问题描述】:

我正在编写一些代码来计算数组中每一行的总数。

    public static int sum(int[][] array) {
    int total = 0;
    for (int i = 0; i < array.length; i++) {
        for (int k = 0; k < array[i].length; k++) {
            total = total + array[i][k];
        }
    }
    return total;
}

上面的代码是计算出二维数组中所有数字的总和,但是我试图计算出数组每一行的总和。

    public static int[] rowSums(int[][] array) {
}

我非常不确定如何让代码为每一行计算出二维数组。

【问题讨论】:

  • 使用数组存储每一列的total。这样你就可以total[k] = total[k] +array[i]k];
  • 如果任何答案对您有帮助,您应该接受答案。

标签: java arrays arraylist multidimensional-array


【解决方案1】:

你的意思是这样的吗:

public static int[] sum(int[][] array) {

    //create an array of size array.length
    int[] result = new int[array.length];
    int total;

    //Loop over the first dimension 
    for (int i = 0; i < array.length; i++) {

        total = 0;//Make sure to re-initialize the total in each iteration

        //For each row calculate the sum and store it in total
        for (int k = 0; k < array[i].length; k++) {
            total += array[i][k];
        }

        //When you finish put the result of each row in result[i]
        result[i] = total;
    }
    return result;
}

例子

System.out.println(
        Arrays.toString(sum(new int[][]{{1, 1, 1}, {2, 2}, {3, 3}}))
);

输出

[3, 4, 6]

【讨论】:

  • 就像您解释了发生的事情一样,供将来寻找答案的任何人使用。
  • 我使用您的代码发布了我的答案(仅通过 enhanced loops 更改了 loops。我对您表示赞赏,并对您的答案投了赞成票。
  • 没关系@zlakad 随意;)
【解决方案2】:

如果您使用的是 Java 8,则可以通过以下方式进行:

int[] ar = Arrays.stream(new int[][]{{1,2},{3,5}}) // source
                 .mapToInt(arr -> IntStream.of(arr).sum()) // sum inner array
                 .toArray(); // back to int[]
System.out.println(Arrays.toString(ar)); // print the array

没有流:

int[][] arr = {{1,2},{3,5}};
// create a array that stores the total of each inner array
int[] total = new int[arr.length];
// first loop for outer array
for (int i = 0; i < arr.length; i++) {
    // loop for inner array
    for (int k = 0; k < arr[i].length; k++) {
        // since default value of total[i] is 0, we can directly use +=
        total[i] += arr[i][k];
    }
}
// print the array
System.out.println(Arrays.toString(total));

【讨论】:

    【解决方案3】:

    基于@YFC_L 答案,但使用增强循环:

    public static int[] sum2(int[][] array) {
    
        //create an array of size based of how many rows the array has
        int[] result = new int[array.length];
    
        int rowIndex = 0;
        //Loop over each row
        for (int[] row : array) {
            int total = 0;
    
            //Calculate the sum of the row
            for (int n : row) {
                total += n;
            }
    
            //Store the sum in the result
            result[rowIndex++] = total;
    
        }
        return result;
    }
    

    另外,这个方法也可以用同样的方式进行测试:

    public static void main(String[] args) {
        System.out.println(
                Arrays.toString(sum2(new int[][]{{1, 1, 1}, {2, 2}, {3, 3}}))
        );
    }
    

    当然输出是一样的:

    [3, 4, 6]
    

    【讨论】:

      【解决方案4】:

      用你的代码稍微修改一下试试这个

      public static int[] sum(int[][] array) {
          List<Integer> rowTotal = new ArrayList<>();
          int total = 0;
          for (int i = 0; i < array.length; i++) {
              for (int k = 0; k < array[i].length; k++) {
                  total = total + array[i][k];
              }
              rowTotal.add(total);
              total = 0;
          }
          return rowTotal.stream().mapToInt(i->i).toArray();
      }
      

      【讨论】:

        【解决方案5】:
        public static List<Integer> sum(int[][] array) {
            List<Integer> total = new ArrayList<>();
            for (int i = 0; i < array.length; i++) {
                int sum = 0;
                for (int k = 0; k < array[i].length; k++) {
                    sum = sum + array[i][k];
                }
                total.add(sum);
            }
            return total;
        }
        

        如果在得到结果后需要使用 int[],

        List<Integer> total = sum(ar); 
        Integer[] result = total.toArray(new Integer[0]);
        

        使用结果对象以供进一步使用。

        【讨论】:

        猜你喜欢
        • 2021-12-23
        • 2019-05-16
        • 1970-01-01
        • 2021-08-13
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 2021-05-23
        • 2019-12-11
        相关资源
        最近更新 更多