0

I have a class Mold with the following constructor

public Mold(int[][] mold){
    this.mold = mold; 
  }

I also have a method sum() which looks like this:

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

What I am trying to do is compute the sum of all the elements in Mold but I am unsure as to what to put in the sum += matrix[i][i]; part in place of 'i'. I might even be doing it the complete wrong way. I have been stuck on this for a while and I cannot seem to figure it out.

An example of the output I would like to get is: int[][] test1 = { { 10, 5 }, { 2, 8 } }; should give 25 one the sum method has been applied.

If someone could push me in the right direction that would be great! Many thanks,

4

6 回答 6

2

你正在这样做:

假设一个由 3x3 元素组成的二维数组,这些是它们的坐标(行、列):

[0,0][0,1][0,2]
[1,0][1,1][1,2]
[2,0][2,1][2,2]

您仅使用一个循环和循环中的一个变量进行计数的方式是这样做的:

i = 0(计算元素 0,0)

[*][ ][ ]
[ ][ ][ ]
[ ][ ][ ]

i = 1(计算元素 1、1)

[ ][ ][ ]
[ ][*][ ]
[ ][ ][ ]

i = 2(计算元素 2,2)

[ ][ ][ ]
[ ][ ][ ]
[ ][ ][*]

您需要使用双循环来求和。循环每一行,对于循环的每一行,您必须为该行的每一列循环。

像这样的东西:

for (i = 0; i < maxRows; i++){
 for (j = 0; j < maxCols; j++{
  //
 }
}
于 2013-09-19T16:42:42.867 回答
1

你拥有它的方式,你只会总结位置,,,,[0][0]...... ,[1][1]你会错过大部分元素。[2][2][i][i]

您的数组中有 2 个维度,因此您需要 2 个循环。

for在现有循环中创建另一个循环for,使用不同的循环变量j. 当它到达当前行长度的末尾时它将停止:matrix[i].length。添加到 时sum,使用两个循环变量:matrix[i][j].

于 2013-09-19T16:37:57.227 回答
1

在您当前的方法中,您只是在对角线 (0,0)、(1,1)、(2,2) 中添加元素。如果处理数组数组,您可以使用两次增强for循环:一次循环遍历数组中的元素,另一次循环遍历数组数组中的元素:

int sum = 0;
for(int[] moldElement : mold) {
    for(int element : moldElement) {
        sum += element;
    }
}
return sum;
于 2013-09-19T16:38:22.487 回答
1

想想你到底在做什么以及如何完成它。

请记住,二维数组是数组的数组。

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

`sum[i][i]` in this code is essentially doing this.
     0  0
     1  1
     2  2
     3  3
     4  4
     ...

你需要它做的是

     0   0 
     0   1
     0   2
     ...
     1   0
     1   1 
     1   2
     ...

把它想象成坐标 X 和 Y!

这将是你的答案。

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

特别注意这一行。matrix[i].length如果阵列不完全一致怎么办?

例如。

  i
j[0][][][][][]
 [1][]
 [2][][][]
 [3][][][][][][]

这仍然能够迭代。

于 2013-09-19T16:40:26.210 回答
0

做双重for循环。

int sum = 0;
for(int i = 0; i < matrix.length; i++)
{
    for(int j = 0; j < matrix[0].length; j++)
    {
        sum += matrix[i][j];
    }
}
return sum;
于 2013-09-19T16:37:43.140 回答
0

嵌套for循环

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

正如有人所说,您只迭代数组的一维。当你有一个数组的 n 维时,你需要 n 个循环。

于 2013-09-19T16:38:04.710 回答