File picker now refuses to load unsolvable files

This commit is contained in:
Imbus 2023-12-11 14:58:54 +01:00
parent e6cd5a2915
commit 270a9f381d
2 changed files with 21 additions and 4 deletions

View file

@ -26,13 +26,13 @@ public class SudokuController {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
// Solve the board // Solve the board
boolean solved = model.solve(); boolean solved = model.solve();
// Update the view
view.updateView(model.getBoard());
if (!solved) { if (!solved) {
view.showErrorMessage("Could not solve the board."); view.showErrorMessage("Could not solve the board.");
System.out.println("Could not solve the board."); System.out.println("Could not solve the board.");
System.out.println(model.toString()); System.out.println(model.toString());
} else { } else {
// Update the view
view.updateView(model.getBoard());
} }
} }
@ -70,6 +70,13 @@ public class SudokuController {
if (newBoard != null) { if (newBoard != null) {
// Set the model // Set the model
model.setBoard(newBoard); model.setBoard(newBoard);
// Warn and clear if the board is not solvable
if(!model.isSolvable()) {
view.showErrorMessage("The board is not solvable.");
model.clear();
}
// Update the view // Update the view
view.updateView(model.getBoard()); view.updateView(model.getBoard());
} }
@ -113,7 +120,7 @@ public class SudokuController {
} }
// If the input is invalid, value < 0 indicates parse error // If the input is invalid, value < 0 indicates parse error
if (!model.isLegal(row, col, value) || value < 0) { if (value != 0 && !model.isLegal(row, col, value) || value < 0) {
value = 0; value = 0;
view.showErrorMessage("Invalid input. Try again."); view.showErrorMessage("Invalid input. Try again.");
} }

View file

@ -29,7 +29,12 @@ public class Solver implements SudokuSolver {
/** Resets the board to all zeros */ /** Resets the board to all zeros */
@Override @Override
public void clear() { public void clear() {
board = new int[9][9]; for (int[] row : board) {
for (int i = 0; i < row.length; ++i) {
row[i] = 0;
}
}
// board = new int[9][9];
} }
/* {@inheritDoc} */ /* {@inheritDoc} */
@ -144,6 +149,11 @@ public class Solver implements SudokuSolver {
return false; return false;
} }
// Ihe the number is already present in the cell
if (board[row][col] == num) {
return true;
}
// Check both the row and column // Check both the row and column
for (int i = 0; i < 9; i++) { for (int i = 0; i < 9; i++) {
if (board[row][i] == num || board[i][col] == num) { if (board[row][i] == num || board[i][col] == num) {