2017-01-22 12 views
0

2D配列の各列の値をすべて追加しようとしていますが、これらの合計は配列の最後の行を上書きする値になります最後の行の値になる2D配列の各列を追加する

は、例えば:

4 5 6 7 8 
1 2 3 4 5 
0 0 0 0 0 //this row will be replaced by the sum of each column 

4 5 6 7 8 
1 2 3 4 5 
5 7 9 11 13 

public static void fillTotals(int[][] scores) 
{ 
    int count = 0; 
    for (int r = 0; r < scores.length - 1; r++) 
    { 
     scores[r][0] += count; 
     scores[scores.length - 1][scores[0].length - 1] = count; 
    } 
} 

私は同じ列を保持し、変更した行でそれを追加できると思っていたが、それは最後の行を書き換えていません。また、下の値を変更する方法がわかりません

+0

「スコア」の最後の行は空白として扱うべきですか? –

+0

はい、書かれた前提条件のすべてで、それらはすべて0です。 – cf0

答えて

0

すべての行と列に対して1回反復処理を行い、実際にはすべての行をすべての列に対して反復処理する必要があります。すべての行で列の数が同じであると仮定すると、scores[0].lengthを固定値として使用できます。

public static void fillTotals(int[][] scores) { 
    for (int c=0; c < scores[0].length; ++c) { 
     int sum = 0; 
     for (int r=0; r < scores.length - 1; ++r) { 
      sum += scores[r][c]; 
     } 
     scores[scores.length - 1][c] = sum; 
    } 
} 

これは、2Dアレイの最終行が合計の一部ではなく、列ごとに、先行するすべての値の合計で上書きすることが可能であることを前提としています。

+0

これはたくさんの助けになります、ありがとうございました!私はもともとネストされたforループを実行しようとしましたが、うまくいきませんでしたので、単に行を変更しなければならないと思っていました。 – cf0

0

何も更新されていない理由は、countを変更しないということです。すべてを0にするだけです。私はあなたが何をしたいと思うの代わり:

scores[r][0] += count; 

です:

count += scores[r][0]; 

道のカウントが最初の列内のすべての要素の合計が含まれていること。

明確にするため、scores[r][0] += count;は、私はあなたがおそらく言われていることcount = scores[r][0] + count;

、イムまだこのコードありえないが、実際にあなた以来、(ごめん)仕事に行くのではかなり確信してしか、実際にしたいと思う一方で、scores[r][0] = scores[r][0] + count;と同じです最初の列の合計値。しかし、ちょうどあなたのための学校の割り当てかもしれない方法を行うために、私はそこにそれを残すつもりです。あなたがまだ立ち往生しているなら、私に知らせてください。私は助けようとします!

関連する問題