F
FightClb
Gast
Hallo, ich sitze zur Zeit an folgendem Projekt für meine Fachrarbeit:
[project.SUDOKU]
[package.controller]
SudokuController(SudokuManager,SudokuView).java
SudokuFieldController(SudokuField,SudokuFieldView).java
[package.model]
SudokuCell(int row, int column).java
SudokuField(int size).java
SudokuManager.java
[package.sudoku]
Main.java >>erstellt: SudokuManager();SudokuView(SudokuManager);SudokuController(SudokuManager,SudokuView);
[package.utilities]
SudokuChecker.java
SudokuGenerator.java
SudokuSolver.java //alles static, dient nur für die Methoden
[package.view]
SudokuFieldView(SudokuField).java
SudokuView(SudokuManager).java
Zu erweiternde Funktion:
Schrittweises Lösen (Anzeigen des SudokuFeldes) während der Methoden.
Problem:
Wie kann ich die Schleife der statischen Methode solveSudokuBruteForce warten lassen und währenddessen die Anzeige erneuern.
Projekt:
RapidShare: 1-CLICK Web hosting - Easy Filehosting
QuellCode:
Methode SolveBruteForce:
[project.SUDOKU]
[package.controller]
SudokuController(SudokuManager,SudokuView).java
SudokuFieldController(SudokuField,SudokuFieldView).java
[package.model]
SudokuCell(int row, int column).java
SudokuField(int size).java
SudokuManager.java
[package.sudoku]
Main.java >>erstellt: SudokuManager();SudokuView(SudokuManager);SudokuController(SudokuManager,SudokuView);
[package.utilities]
SudokuChecker.java
SudokuGenerator.java
SudokuSolver.java //alles static, dient nur für die Methoden
[package.view]
SudokuFieldView(SudokuField).java
SudokuView(SudokuManager).java
Zu erweiternde Funktion:
Schrittweises Lösen (Anzeigen des SudokuFeldes) während der Methoden.
Problem:
Wie kann ich die Schleife der statischen Methode solveSudokuBruteForce warten lassen und währenddessen die Anzeige erneuern.
Projekt:
RapidShare: 1-CLICK Web hosting - Easy Filehosting
QuellCode:
Methode SolveBruteForce:
Java:
private static void solveBruteForce(int size, SudokuField sudokuField, boolean stepByStep) {
//Vorbereitungen treffen
Stack freeCells = getFreeCells(size, sudokuField);
Stack increasedCells = new Stack();
Stack solvedSudokus = new Stack();
SudokuCell currentSudokuCell;
//Alle Zellen auf den Mindestwert setzen
while (!freeCells.isEmpty()) {
currentSudokuCell = (SudokuCell) freeCells.peek();
increasedCells.push(freeCells.pop());
currentSudokuCell.setValue(1);
}
while (!increasedCells.isEmpty()) {
freeCells.push(increasedCells.pop());
}
//Alle Möglichen Kombinationen durchgehen
while (!freeCells.isEmpty()) {
boolean newValue = false;
//Die aktuelle Zelle hat ihren Maximalwert erreicht, also soll die nächste Zelle auch erhöht werden.
while (!newValue) {
currentSudokuCell = (SudokuCell) freeCells.peek();
if (currentSudokuCell.getValue() < 9 && !freeCells.isEmpty()) {
currentSudokuCell.incValue();
newValue = true;
} else {
currentSudokuCell.setValue(1);
increasedCells.push(freeCells.pop());
}
}
// Alle Zellen wieder auf den 1. Stapel setzen
while (!increasedCells.isEmpty()) {
freeCells.push(increasedCells.pop());
}
if(stepByStep){
sudokuField.refresh();
//Warten lassen
}
if (SudokuChecker.isValidSudoku(size, sudokuField)) {
return;
}
}
return;
}