2012-02-16 33 views
1

私はJavaを勉強しています。そして私はそれが魔方陣であるかどうかを返す2D配列をチェックするコードを作っていました。Javaでnxn行列の各列の和を求める方法は?

これを行うには、私はいくつかの異なるメソッドを記述しなければならず、そのうちの1つはチェックするためのもので、各列の要素の合計がすべて等しいことです。私は行のためにすることができたが、私は列のためにそれをしようとしたときに私は少し混乱した。そして、私の友人は、すべての行の合計が等しいことをチェックする方法とほぼ同じだと言った。私の行の方法は以下の通りです。

public static boolean rowSumsOK(int arr[][], int total) { 
    boolean a = false; 
    total = sumOneRow(arr); 
    int x=0; // this will be counted sum for each rows 

    for (int i=0; i<arr.length; i++){ 
     for (int j=0; j<=arr.length; j++){ 
      x = x + arr[i][j]; 
     } 
     if(x != total){ 
      a = false; 
      break; 
     } 

     else 
      a = true; 
    } 

    return a; 
} 

と、彼は列のためにそれを行うため、その方法に変更することが示唆は以下のとおりです。

 x = x + arr[j][i]; 

私はまだこのことについて少し混乱しています。この方法について私に説明してもらえますか、それとも私にそれを行う別の方法を教えてもらえますか?

+2

あなたに与えられた提案は、列を合計する必要がありますこのような何かを試してみてください。あなたがそれについて混乱しているなら、私は配列が何であるか、そして/またはどのようにループが働くかについてもっと学ぶことをお勧めします。 – Danny

+0

私はそれがどう起こったのかわからないが、私はちょうどここに投稿した後に言ったことを考え出した。多分私は彼が何を意味するかを見るのに十分に集中していなかったでしょう。 ありがとうございました –

答えて

2
public static boolean columnSumsOK (int arr[][], int total) 
    { 
     for (int j = 0; j < arr [ 0 ].length; j++) 
     { 
      int sum = 0; 
      for (int i = 0; i < arr.length; i++) 
       sum = sum + arr [ i ] [ j ]; 
      if (sum != total) 
       return false; 
     } 
     return true; 
    } 
+0

応答ありがとう、私はそれを理解しています。きれいでシンプルに見えます。 –

+0

Timur、もう一度私のコードをチェックしてください、いくつかのインデックスエラーがあった、それはそれぞれの列の要素の合計を1つずつ計算しようとすると、その列の合計を "合計"パラメータと比較する方法で動作しますメソッドはすぐにfalseを返し、それ以外の場合は評価を続けます。 – Juvanis

+0

こんにちは記者、 ご返信ありがとうございます。私はあなたのコードをもう一度読み、私はポイントを得た。名声(y) –

0

私は列iの要素のtotalSumを持つ別の配列(columnTotal)を保持します。一度に1列ずつ列をループし、その列の行を合計します。基本的には、行の合計のコードですが、内側と外側のループが逆になっています。

int columnTotal[] = new int[array.length]; 

for(int column= 0; column< array.length; column++) 
{ 
    columnTotal[column] = 0; 
    for(int row= 0; row < array.length; row++) 
    { 
     columnTotal[column] += array[row][column]; 
    } 
} 
+0

私はそれがcolumnTotal [column] + = array [row] [column]であるはずです。 – vjain27

+0

はい、タイプミスです。私の間違い。コードを修正するために編集しました。 – Oleksi

関連する問題