如何在矩阵中求和一行

时间:2017-01-29 23:04:53

标签: java multidimensional-array

写下方法:

public int sumRow(int[][] matrix, int row)

将二维数组中的行row相加,称为矩阵。

假设:

public void run()
{
    System.out.println(sumRow(new int[][]{{70,93,68,78,83},{68,89,91,93,72},{98,68,69,79,88}}, 2));
    System.out.println(sumRow(new int[][]{{1,1,1}, {2,2,2}, {3,3,3}}, 0));
    System.out.println(sumRow(new int[][]{{2,4,6,8,10}, {1,2,3,4,5}, {10,20,30,40,50}}, 2));
}

到目前为止,我有:

public int sumRow(int[][] matrix, int row)
{
    int sum = 0;
    for(int i = 0; i < matrix.length; i++)
    {
        for(int j = 0; j < matrix.length; j++)
        {
            sum = sum + matrix[j][i];
        }   
    }
    return sum;
}

我得到的输出是714,18和78,它们应该是402,3和150.我做错了什么?

6 个答案:

答案 0 :(得分:5)

当您被要求对2D数组中的特定行求和时,您当前正在尝试对2D数组中的所有元素求和。在这种情况下,您只需要一个for循环来遍历单个行,就像遍历单个数组一样。循环将从第一个元素int row = matrix.length; 开始,一直运行到最后一个元素int col = matrix[0].length; ,因为matrix[row][0]是矩阵特定行中的列/元素数。因此,matrix[row][matrix[row].length - 1]将是matrix[row].length中最后一个元素的索引。这是它应该是什么样子,

matrix[row].length - 1

答案 1 :(得分:1)

Feed

<强> HINT

行的长度

feed: {
  id: 123,
  feed_tracks: [
    {
      id: 123,
      current: true
    },
    {
      id: 456,
      current: true
    }
  ]
}

列的长度

public int sumRow(int[][] matrix, int row)
{
    int sum = 0;

    int colSize = matrix[row].length;


    for(int j = 0; j < colSize; j++){
        sum += matrix[row][j];
    }   

    return sum;
}

答案 2 :(得分:0)

在内部循环中,将条件修改为:

for(int j = 0; j < matrix[i].length; j++)

然后在总和

中切换ij

答案 3 :(得分:0)

第二个for循环条件存在问题,matrix.length是第一维的长度,第二维看起来像matrix[i].length

for(int i = 0; i < matrix.length; i++){
     for(int j = 0; j < matrix[i].length; j++){
         sum = sum + matrix[i][j];
     }   
}

我更喜欢使用sum+=matrix[i][j]代替sum = sum + matrix[i][j]

计算一个行:

for(int j = 0; j < matrix[row].length; j++){
    sum = sum + matrix[row][j];
}

只是注意该行的范围是从0matrix.length-1

答案 4 :(得分:0)

使用Java Streams可以非常优雅地完成:

public static int sumRow2(int[][] matrix, int row) {
    return  Arrays.stream(matrix[row]).sum();
}

答案 5 :(得分:-1)

您需要为j。

引用数组的第二个维度
//ex: first dimension is matrix.length
//second dimension is matrix[any index in the first dimension].length
//and this cycle would continue with more and more [num] on the end

public int sumRow(int[][] matrix, int row)
{
    int sum = 0;
    for(int i = 0; i < matrix.length; i++)
    {
        for(int j = 0; j < matrix**[0]**.length; j++)
        {
            sum = sum + matrix[j][i];
        }   
    }
    return sum;
}