0

Mold次のコンストラクタを持つクラスがあります

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

sum()次のようなメソッドもあります。

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

私がやろうとしているのは、すべての要素の合計を計算することですが、「i」の代わりにMold何を入れればよいかわかりません。sum += matrix[i][i];私はそれを完全に間違った方法でやっているかもしれません。私はしばらくこれに固執していて、それを理解できないようです。

私が取得したい出力の例は次のとおりint[][] test1 = { { 10, 5 }, { 2, 8 } };です。合計メソッドが適用された 25 を与える必要があります。

誰かが私を正しい方向に押し進めることができれば、それは素晴らしいことです! どうもありがとう、

4

6 に答える 6

2

あなたはこれをやっています:

3x3 要素の 2 次元配列を仮定すると、これらはそれらの座標 (行、列) です。

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

ループを 1 つだけ使用し、ループ内の変数を 1 つだけ使用してカウントする方法は、次のとおりです。

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

正確に何をしているのか、それをどのように達成するのかを考えてください。

2次元配列は配列の配列であることを思い出してください。

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 に答える
1

あなたのやり方では、位置[0][0][1][1][2][2]、... を合計するだけで[i][i]、ほとんどの要素を見逃すことになります。

配列には 2 つの次元があるため、2 つのループが必要です。

別のループ変数 を使用して、for既存のループ内に別のループを作成します。現在の行の長さの終わりに達すると停止します: 。に追加するときは、両方のループ変数を使用します: 。forjmatrix[i].lengthsummatrix[i][j]

于 2013-09-19T16:37:57.227 に答える
1

現在のアプローチでは、対角要素 (0,0)、(1,1)、(2,2) を追加するだけです。配列の配列を処理する場合、強化されたforループを 2 回使用できます。1 つは配列内の要素をループし、もう 1 つは配列の配列内の要素をループします。

int sum = 0;
for(int[] moldElement : mold) {
    for(int element : moldElement) {
        sum += element;
    }
}
return sum;
于 2013-09-19T16:38:22.487 に答える
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;
  }

誰かが言ったように、配列の 1 つの次元だけを反復処理しています。配列の次元が n の場合、n ループが必要です。

于 2013-09-19T16:38:04.710 に答える