Hallo,
ich programmiere gerade Sudoku mit integriertem Solver.
Das lösen funktioniert auch prima, bis ich ihn das zweite mal aufrufe. Dann hält er kurz vor der 6. Zeile an; mit einem StackOverflowError.
Hier der solver:
Und so wird er aufgerufen von einer anderen Klasse aufgerufen:
ich programmiere gerade Sudoku mit integriertem Solver.
Das lösen funktioniert auch prima, bis ich ihn das zweite mal aufrufe. Dann hält er kurz vor der 6. Zeile an; mit einem StackOverflowError.
Hier der solver:
Code:
public void solve(Integer r, Integer c) {
//wenn das Sudoku noch nicht gelöst ist
if (isValid(data) == false) {
if (c > n - 1) { //Spalten- und Zeilenangaben überprüfen und korrigieren
r++;
c = 0;
}
if (c < 0) {
r--;
c = 8;
}
if (sudokuData[r][c] == 0) {//Falls das aktuelle Feld verändert werden darf
data[r][c]++;//Feld setzen
if (data[r][c] <= n) {//Falls die gesetzte Zahl nicht größer als 9 ist
if (isNumberValid(data, r, c)) {//falls der gesetzte Inhalt gültig ist
back = false;
solve(r, c + 1);//nächstes Feld aufrufen
} else {
back = false;
solve(r, c);
}
} else {
back = true;//Schritt rückgängig machen
data[r][c] = 0;
solve(r, c - 1);
}
} else {//wenn das Feld nicht verändert werden darf: nächstes/vorheriges Feld aufrufen
if (back == false) {
back = false;
solve(r, c + 1);
} else {
back = true;
solve(r, c - 1);
}
}
}
}
Und so wird er aufgerufen von einer anderen Klasse aufgerufen:
Code:
public void solveSudoku() {
solver.setData(sudokuData.getSudokuData());//übergibt das Sudokuarray an die Solver Klasse
solver.solveSudoku(0,0);//ruft den solver auf
data = solver.getData();//holt sich die daten des gelösten Sudokus
tableModel.setHoleValueAt((Object[][]) data);//übergibt dem TableModel die Daten
}
Ich hatte zuvor noch einen Parameter: private void solve(Integer r, Integer c, Integer z).
In dem Fall hat er noch nicht mal einen Durcchgang geschafft.
Ich hoffe ihr könnt mir helfen. Ich sitze nämlich schon ein paar Tage daran.
Gruß
Steve