JAVA如何计算二维数组每行的总和?

3

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

    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[k] = total[k] +array[i][k];来计算总和。 - AxelH
如果有任何答案对您有帮助,您应该接受该答案。 - user7780894
5个回答

5
你是不是想表达类似这样的意思:
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]

2
就像您所解释的那样,对于将来寻找答案的任何人都很有帮助。 - dimwittedanimal
我使用了你的代码来发布我的答案(只是将 loops 替换为 enhanced loops)。我给了你信用并且也点赞了你的答案。 - zlakad
没问题 @zlakad,随便说吧 ;) - Youcef LAIDANI

4
如果您正在使用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]

1
尝试对您的代码进行轻微修改:

请尝试此操作

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();
}

1
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]);

使用结果对象进行进一步操作。

你正在将一个 List 中的 Integer 转换成一个 String 数组吗?[有用的基于意见的 gif] (https://tenor.com/sedk.gif) - Shirkam
已更新我的回答 :) - Mayur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接