Hallo,
meine Aufgabe ist es eine nxn Matrix mit den Zahlen 1 bis n² auszugeben und die Zahlen sollen zufällige Positionen haben, das habe ich soweit geschafft. Nun der nächste Schritt wäre es, die Matrix so lange auszugeben bis ein magisches Quadrat entstanden ist. Also so lange bis jede Zeile & jede Spalte die gleiche Summe hat, bei einer Matrix mit n = 3 wäre die Summe jeder Zeile & Spalte z.B. 15. Es soll eben erst dann stoppen wenn so ein magisches Quadrat in der Ausgabe steht und da weiß ich einfach nicht weiter.
Hier mein code:
meine Aufgabe ist es eine nxn Matrix mit den Zahlen 1 bis n² auszugeben und die Zahlen sollen zufällige Positionen haben, das habe ich soweit geschafft. Nun der nächste Schritt wäre es, die Matrix so lange auszugeben bis ein magisches Quadrat entstanden ist. Also so lange bis jede Zeile & jede Spalte die gleiche Summe hat, bei einer Matrix mit n = 3 wäre die Summe jeder Zeile & Spalte z.B. 15. Es soll eben erst dann stoppen wenn so ein magisches Quadrat in der Ausgabe steht und da weiß ich einfach nicht weiter.
Hier mein code:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Quadrat {
// deklarieren was man benötigt
static int[][] matrix;
static int[] summeZeile;
static int[] summeSpalte;
static int anzahlZeilen;
static int anzahlSpalten;
public static void main(String args[]) {
// Benutzereingabe des Parameters N - Dimension der Matrix
int n = 0;
while (true) {
try {
BufferedReader buffy = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Bitte eine Zahl für n eingeben:");
n = Integer.parseInt(buffy.readLine());
if (n < 0) {
throw new NumberFormatException("negative Zahl");
}
break;
} catch (IOException e) {
System.out.println("Eine IO Exception ist aufgetreten");
e.printStackTrace();
} catch (NumberFormatException e) {
System.out.println("Es wurde keine Zahl eingegeben!");
} catch (NegativeArraySizeException e) {
System.out.println("Es dürfen nur positive Zahlen eingegeben werden!");
}
}
anzahlZeilen = n;
anzahlSpalten = n;
matrix = new int[anzahlZeilen][anzahlSpalten];
List<Integer> werte = new ArrayList<Integer>();
int anz = n * n;
for (int i = 0; i < anz; i++) {
werte.add(Integer.valueOf(i + 1));
}
Collections.shuffle(werte);
for (int a = 0; a < matrix.length; a++) {
for (int b = 0; b < matrix[a].length; b++) {
matrix[a][b] = werte.get(0);
werte.remove(0);
}
}
calculateReihe();
calculateSpalte();
printMyArray(matrix);
}
// berechnen der Spaltensumme
private static void calculateSpalte() {
summeSpalte = new int[anzahlSpalten];
for (int Spaltenindex = 0; Spaltenindex < matrix.length; Spaltenindex++) {
for (int Zeile = 0; Zeile < matrix[Spaltenindex].length; Zeile++) {
summeSpalte[Zeile] = summeSpalte[Zeile] + matrix[Spaltenindex][Zeile];
}
}
}
// berechnen der Zeilensumme
private static void calculateReihe() {
summeZeile = new int[anzahlZeilen];
for (int Zeilenindex = 0; Zeilenindex < matrix.length; Zeilenindex++) {
for (int Spalte = 0; Spalte < matrix[Zeilenindex].length; Spalte++) {
summeZeile[Zeilenindex] = matrix[Zeilenindex][Spalte] + summeZeile[Zeilenindex];
}
}
}
private static void printMyArray(int[][] matrix) {
for (int i = 0; i < matrix.length; i++) {
System.out.println(Arrays.toString(matrix[i]) + " Summe der Zeile: " + summeZeile[i]);
}
for (int i = 0; i < summeSpalte.length; i++) {
System.out.print("====");
}
System.out.print("\nSumme der Spalten 1 bis n: \n[");
for (int i = 0; i < summeSpalte.length; i++) {
if (i == summeSpalte.length - 1) {
System.out.print(summeSpalte[i] + "]");
} else {
System.out.print(summeSpalte[i] + ", ");
}
}
}
}