1

だから私は対角線を合計して魔法の定数と比較しようとしています。それらが同じ場合、それは魔方陣です。対角線のコードを書くことはできましたが、間違った結果が表示されています。私のコードはここにあります:

 public static boolean checkDiagonals(int[][] array, int magicConstant){
   int total = 0;
   int wrong = 0;
   for(int i = 0; i < array.length; i++){
     total= total + array[i][i] + array[array.length - i-1][array.length - i-1];
   }
   if(total!=magicConstant){
     wrong++;
  }
  System.out.println("There were " + wrong + " invalid diagnals.");
  return wrong == 0;
}

私の出力はこれです

サイズ: 3

1 1 1

5 5 5

9 9 9

1 1 1
5 5 5
9 9 9
魔法定数は15

1 個の無効なダイアグナルがありました。

これは魔方陣ではありません。

サイズ: 3

8 1 6

3 5 7

4 9 2

8 1 6
3 5 7
4 9 2
魔法定数は15

1 個の無効なダイアグナルがありました。

これは魔方陣ではありません。

正しい出力は、2 番目のものが魔方陣であることを示すはずですが、私のプログラムはそうではないと言っています。

私のコードに何か問題があると思う理由はThere were 1 invalid diagnals.、すべての正方形を取得しているため、ここに何か問題があるからです。

編集 正しい出力を得るのに問題があります。私はそれが digonals の追加と関係があると信じています なぜすべての正方形に対して 1 つの無効な対角線を出力し続けるのですか? 私が示した出力は2つの正方形だけですが、他の正方形で試してみると、印刷が続けられます1 invalid diagonal

4

1 に答える 1

0

詳細については、コメントのディスカッションを参照してください。

 public static boolean checkDiagonals(int[][] array, int magicConstant){
   int total1 = 0;
   int total2 = 0;
   int wrong = 0;
   for(int i = 0; i < array.length; i++){
     total1= total1 + array[i][i];
     total2 = total2 + array[array.length - i-1][array.length - i-1];
   }
   if(total1!=magicConstant){
     wrong++;
  }
   if(total2!=magicConstant){
     wrong++;
  }
  System.out.println("There were " + wrong + " invalid diagnals.");
  return wrong == 0;
}
于 2016-10-31T03:23:08.593 に答える