diff --git a/app/src/main/java/gui/SudokuController.java b/app/src/main/java/gui/SudokuController.java index a95f1a4..a283ab8 100644 --- a/app/src/main/java/gui/SudokuController.java +++ b/app/src/main/java/gui/SudokuController.java @@ -26,13 +26,13 @@ public class SudokuController { public void actionPerformed(ActionEvent e) { // Solve the board boolean solved = model.solve(); + // Update the view + view.updateView(model.getBoard()); if (!solved) { view.showErrorMessage("Could not solve the board."); System.out.println("Could not solve the board."); System.out.println(model.toString()); } else { - // Update the view - view.updateView(model.getBoard()); } } @@ -70,6 +70,13 @@ public class SudokuController { if (newBoard != null) { // Set the model 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 view.updateView(model.getBoard()); } @@ -113,7 +120,7 @@ public class SudokuController { } // 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; view.showErrorMessage("Invalid input. Try again."); } diff --git a/app/src/main/java/sudoku/Solver.java b/app/src/main/java/sudoku/Solver.java index 89d24cf..95a77b3 100644 --- a/app/src/main/java/sudoku/Solver.java +++ b/app/src/main/java/sudoku/Solver.java @@ -29,7 +29,12 @@ public class Solver implements SudokuSolver { /** Resets the board to all zeros */ @Override 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} */ @@ -144,6 +149,11 @@ public class Solver implements SudokuSolver { return false; } + // Ihe the number is already present in the cell + if (board[row][col] == num) { + return true; + } + // Check both the row and column for (int i = 0; i < 9; i++) { if (board[row][i] == num || board[i][col] == num) {