Guten Abend euch allen,
Ich bin durch Google auf dieses Forum hier gestoßen weil ich folgendes Problem habe:
Ich wollte einen Algorithmus implementieren der mir mit Backtracking ein magisches Quadrat schreibt.
Doch komme ich einfach nicht weiter. Mir wird bei
[JAVA=57]int zeile = zelle / quadrat.length;[/code]
immer NullPointerException ausgegeben.
Hier mal meine komplette Klasse:
Ich hoffe ihr könnt mir helfen
Mfg
Ich bin durch Google auf dieses Forum hier gestoßen weil ich folgendes Problem habe:
Ich wollte einen Algorithmus implementieren der mir mit Backtracking ein magisches Quadrat schreibt.
Doch komme ich einfach nicht weiter. Mir wird bei
[JAVA=57]int zeile = zelle / quadrat.length;[/code]
immer NullPointerException ausgegeben.
Hier mal meine komplette Klasse:
Java:
public class Quadrat {
public static int [] [] quadrat; //= null;
private static boolean [] zahlIstVerwendet;
private static int summe;
private int zeile;
private int spalte;
public Quadrat(/*int [] [] quadrat*/) {
//this.quadrat = quadrat;
quadrat = new int [2][2];
//int [][] quadrat = new int[2][2];
zahlIstVerwendet = new boolean[quadrat.length * quadrat.length + 1];
summe = (quadrat.length * quadrat.length * quadrat.length + quadrat.length) / 2;
}
private static int getZeilenSumme(int zeile) {
int summe = 0;
for (int wert : quadrat[zeile]) {
summe += wert;
}
return summe;
}
private static int getSpaltenSumme(int spalte) {
int summe = 0;
for (int zeile = 0; zeile < quadrat.length; zeile++) {
summe += quadrat[zeile][spalte];
}
return summe;
}
public static boolean isMagischesQuadrat() {
int summe = getZeilenSumme(0);
for (int i = 0; i < quadrat.length; i++) {
if (summe != getZeilenSumme(i) || summe != getSpaltenSumme(i)) {
return false;
}
}
for (int i = 0; i < zahlIstVerwendet.length; i++) {
zahlIstVerwendet[i] = false;
}
for (int zeile = 0; zeile < quadrat.length; zeile++) {
for (int spalte = 0; spalte < quadrat.length; spalte++) {
if ( zahlIstVerwendet[quadrat[zeile][spalte]] ) {
return false;
} else {
zahlIstVerwendet[quadrat[zeile][spalte]] = true;
}
}
}
for (int i = 0; i < zahlIstVerwendet.length; i++) {
zahlIstVerwendet[i] = false;
}
return true;
}
public static boolean erzeugeMagischesQuadrat(int zelle) {
int zeile = zelle / quadrat.length;
int spalte= zelle % quadrat.length;
for (int wert = 1; zelle < quadrat.length * quadrat.length
&& wert <= quadrat.length * quadrat.length ; wert++) {
quadrat[zeile][spalte] = wert;
if (! zahlIstVerwendet[wert] && spalte < quadrat.length - 1 || getZeilenSumme(zeile) == summe
&& (zeile < quadrat.length - 1 || getSpaltenSumme(spalte) == summe)) {
zahlIstVerwendet[wert] = true;
if (zelle < quadrat.length * quadrat.length - 1 || ! isMagischesQuadrat()) {
if ( erzeugeMagischesQuadrat(zelle + 1)) {
return true;
} else {
zahlIstVerwendet[wert] = false;
}
} else {
return true;
}
}
}
return false;
}
public static void print() {
for (int zeile = 0; zeile < quadrat.length; zeile++) {
for (int spalte = 0; spalte < quadrat.length; spalte++) {
System.out.print(quadrat[zeile][spalte] + "\t");
}
System.out.println();
}
}
}
Ich hoffe ihr könnt mir helfen
Mfg