2017-09-21 6 views
1

私は既に各インデックスに値を持っている4×4の2D配列を持っています。私は配列の行/列の合計を計算し、それを最初の/最後の列に格納し、他のインデックスを0に戻します。多次元配列の値の合計を探し、未使用インデックスの値を置き換えるにはどうすればよいですか?

これは私の配列をレンダリングする必要があります:このようなものが表示さ

public static void print2Darray(int[][] numbers) { 
    for (int i = 0; i < numbers.length; i++) { 
     for (int j = 0; j < numbers.length; j++) { 
      System.out.print(numbers[i][j]); 
      System.out.print("\t"); 
     } 
     System.out.println(); 
    } 
} 

10 15 30 40 
15 5 8 2 
20 2 4 2 
1 4 5 0 

は現在、これは私が持っている機能である:

public static void sumLeft(int[][] numbers) { 
    for (int i = 0; i < numbers.length; i++) { 
     numbers[i][0] = (numbers[i][0] + numbers[i][1] + numbers[i][2] + numbers[i][3]); 
     if (i == 3) { 
      numbers[0][1] = 0; 
      numbers[0][2] = 0; 
      numbers[0][3] = 0; 
      numbers[1][1] = 0; 
      numbers[1][2] = 0; 
      numbers[1][3] = 0; 
      numbers[2][1] = 0; 
      numbers[2][2] = 0; 
      numbers[2][3] = 0; 
      numbers[3][1] = 0; 
      numbers[3][2] = 0; 
      numbers[3][3] = 0; 
     } 
    } 
} 
これを行い

95 0 0 0 
30 0 0 0 
28 0 0 0 
10 0 0 0 

私はちょうど「浮気」または単にそれを介して自分の道をハッキングすることなく、これを行うと、アルゴリズムを見つけたいです。

答えて

3

あなたがする必要があるのは、「行の要素をループです:あなたはこの単純なやらなかったのはなぜ

for (int i = 0; i < numbers.length; i++) { // for all rows 
    int sum = 0; // about to be sum, reset every row 
    for (int j = numbers[i].length -1 ; j >=0; j--) { // iterate reverse in columns 
     if (j == 0) { 
      numbers[i][j] += sum; // final sum 
     } else { 
      sum += numbers[i][j]; // keep evaluating 
      numbers[i][j] = 0; //reset 
     } 
    } 
} 
+1

'i ++' vs '++ j'でしょうか?確かに彼らは同じことをしますが、一貫性はプログラミングでは良いことです(少なくとも私の意見では)*。 – Andreas

+0

2人はそのように、そしてもう1人は思うように見えます。 2対1。 – egorlitvinenko

+0

コードのための余分な筋肉の記憶私は自分自身をタイプしました... –

2

として逆の順序で内部ループを使用してください:

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

「numbers [i] [0] + = sum; //最終合算? – Andreas

+0

@Andreasチェックはすでにそこにあります.'j == 0'そしてそれは+ = – nullpointer

2

"配列:

public static void sumLeft(int[][] numbers) { 
    for (int i = 0; i < numbers.length; i++) { 
     for (int j = 1; j < numbers[i].length; j++) { 
      numbers[i][0] += numbers[i][j]; 
      numbers[i][j] = 0; 
     } 
    } 
} 
関連する問題