From 5bf0c92d102e4c3ff8297e56f81ed09b381e5449 Mon Sep 17 00:00:00 2001 From: Imbus Date: Mon, 11 Dec 2023 15:53:22 +0100 Subject: [PATCH 1/2] Error checking inputs and reverting if illegal --- app/src/main/java/gui/SudokuController.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/gui/SudokuController.java b/app/src/main/java/gui/SudokuController.java index a283ab8..0d91eed 100644 --- a/app/src/main/java/gui/SudokuController.java +++ b/app/src/main/java/gui/SudokuController.java @@ -127,6 +127,15 @@ public class SudokuController { // Update the model and view model.set(row, col, value); + + // Warn if the board is not solvable (e.g. if the user has made a mistake) + // This is very messy, error prone and computationally expensive + if(!model.isSolvable()) { + model.set(row, col, 0); + view.showErrorMessage("Illegal move. The board is not solvable."); + } + + // Sync the view with the model view.updateView(model.getBoard()); } } From ffd1d4bd518f3fffea211568f2552a206ca04641 Mon Sep 17 00:00:00 2001 From: Imbus Date: Mon, 11 Dec 2023 16:06:50 +0100 Subject: [PATCH 2/2] Fixing broken test case --- app/src/test/java/sudoku/SolverTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/sudoku/SolverTest.java b/app/src/test/java/sudoku/SolverTest.java index 3a5833b..7000140 100644 --- a/app/src/test/java/sudoku/SolverTest.java +++ b/app/src/test/java/sudoku/SolverTest.java @@ -34,7 +34,8 @@ class SolverTest { assertTrue(solver.isLegal(0, 0, 1)); solver.set(0, 0, 1); - IntStream.range(0, 9).forEach(i -> { + // Start from one, since setting the same value is legal + IntStream.range(1, 9).forEach(i -> { assertFalse(solver.isLegal(0, i, 1)); assertFalse(solver.isLegal(i, 0, 1)); });