import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int[][] quadrat = leseQuadrat();
boolean magisch = magisch(quadrat, true);
// Ausgabe des Ergebnisses
if (magisch) {
int summe = zeilenSumme(0); // ermittelt Summe der ersten Zeile
System.out.printf("Magisch, Summe %d\n", summe);
}
else {
System.out.println("nicht magisch");
}
}
static int[][] leseQuadrat() {
Scanner keyScan = new Scanner(System.in);
// Grösse einlesen
System.out.print("Grösse des Quadrats: ");
int groesse = keyScan.nextInt();
int [][] quadrat = new int[groesse][groesse];
// Quadrat einlesen
System.out.println("Bitte Zahlen eingeben: ");
for (int i=0; i<groesse; i++) {
for (int j=0; j<groesse; j++) {
quadrat[i][j] = keyScan.nextInt();
}
}
return quadrat;
}
static boolean magisch(int[][] quadrat, boolean magisch) {
// Summe Zeile berechnen
int [] summeZeile = new int [groesse];
for (int i=0; i<groesse; i++) {
summeZeile[i] = zeilenSumme(quadrat, i);
}
// Summe Spalte berechnen
int [] summeSpalte = new int [groesse];
for (int j=0; j<groesse; j++) {
summeSpalte[j] = spaltenSumme(quadrat, j);
}
// Summe Diagonale 1
int summeDiagonale1 = 0;
for (int i=0; i<groesse; i++) {
for (int j=0; j<groesse; j++) {
if (i==j) {
summeDiagonale1 = summeDiagonale1 + quadrat[i][j];
}
}
}
// Summe Diagonale 2
int summeDiagonale2 = 0;
for (int i=0; i<groesse; i++) {
for(int j=groesse-1; j>=0; j--) {
if(i+j == groesse-1) {
summeDiagonale2 = summeDiagonale2 + quadrat[i][j];
}
}
}
for (int i = 1; i<groesse; i++) {
if (summeZeile[0] != summeZeile[i]) {
return false;
}
}
for (int j = 1; j<groesse; j++) {
if (summeSpalte[0] != summeSpalte[j]) {
return false;
}
}
if ((summeDiagonale1 != summeSpalte[0]) || (summeDiagonale2 != summeZeile[0])) {
return false;
}
return true;
}
static int zeilenSumme(int[][] quadrat, int zeile) {
int summe = 0;
for (int spalte = 0; spalte < quadrat[zeile].length; spalte++) {
summe += quadrat[zeile][spalte];
}
return summe;
}
static int spaltenSumme(int[][] quadrat, int spalte) {
int summe = 0;
for (int zeile = 0; zeile < quadrat.length; zeile++) {
summe += quadrat[zeile][spalte];
}
return summe;
}
}