diff --git a/.gitignore b/.gitignore index 722dd18..34124a5 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,3 @@ build .vscode -app/bin \ No newline at end of file diff --git a/Justfile b/Justfile index 6ed91e0..675b9de 100644 --- a/Justfile +++ b/Justfile @@ -11,7 +11,7 @@ clean: fd -td -I build -x rm -r watch: - watchexec -r -c -w app/src "just test && just run" + watchexec -c -w app/src "just test && just run" watchdoc: - watchexec -r -c -w app/src "just doc" + watchexec -c -w app/src "just doc" diff --git a/app/sample_sudokus/testfall_3.txt b/app/sample_sudokus/testfall_3.txt deleted file mode 100644 index 3d08a4c..0000000 --- a/app/sample_sudokus/testfall_3.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 2 3 0 0 0 0 0 0 -4 5 6 0 0 0 0 0 0 -0 0 0 7 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 \ No newline at end of file diff --git a/app/sample_sudokus/testfall_5.txt b/app/sample_sudokus/testfall_5.txt deleted file mode 100644 index e512bf8..0000000 --- a/app/sample_sudokus/testfall_5.txt +++ /dev/null @@ -1,9 +0,0 @@ -0 0 8 0 0 9 0 6 2 -0 0 0 0 0 0 0 0 5 -1 0 2 5 0 0 0 0 0 -0 0 0 2 1 0 0 9 0 -0 5 0 0 0 0 6 0 0 -6 0 0 0 0 0 0 2 8 -4 1 0 6 0 8 0 0 0 -8 6 0 0 3 0 1 0 0 -0 0 0 0 0 0 4 0 0 \ No newline at end of file diff --git a/app/src/main/java/gui/SudokuController.java b/app/src/main/java/gui/SudokuController.java index a283ab8..348c997 100644 --- a/app/src/main/java/gui/SudokuController.java +++ b/app/src/main/java/gui/SudokuController.java @@ -25,16 +25,10 @@ public class SudokuController { @Override public void actionPerformed(ActionEvent e) { // Solve the board - boolean solved = model.solve(); + 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 { - } - } }); @@ -70,13 +64,6 @@ 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()); } @@ -101,33 +88,14 @@ public class SudokuController { int row = view.getSelectedRow(); int col = view.getSelectedColumn(); - // The value to be inserted into the cell - // Zero inicates an empty cell - // Negative values are invalid - int value = 0; - - String cellValue = view.getCellValue(row, col); - - // We need to check for null and empty string - if (cellValue == null || cellValue.equals("")) { - value = 0; + int value = Integer.parseInt(view.getCellValue(row, col)); + // Check if the input is legal and update the model and view + if (model.isLegal(row, col, value)) { + model.set(row, col, value); + view.updateView(model.getBoard()); } else { - try { - value = Integer.parseInt(cellValue); - } catch (NumberFormatException ex) { - value = -1; - } - } - - // If the input is invalid, value < 0 indicates parse error - if (value != 0 && !model.isLegal(row, col, value) || value < 0) { - value = 0; view.showErrorMessage("Invalid input. Try again."); } - - // Update the model and view - model.set(row, col, value); - view.updateView(model.getBoard()); } } } diff --git a/app/src/main/java/sudoku/Solver.java b/app/src/main/java/sudoku/Solver.java index 95a77b3..89d24cf 100644 --- a/app/src/main/java/sudoku/Solver.java +++ b/app/src/main/java/sudoku/Solver.java @@ -29,12 +29,7 @@ public class Solver implements SudokuSolver { /** Resets the board to all zeros */ @Override public void clear() { - for (int[] row : board) { - for (int i = 0; i < row.length; ++i) { - row[i] = 0; - } - } - // board = new int[9][9]; + board = new int[9][9]; } /* {@inheritDoc} */ @@ -149,11 +144,6 @@ 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) { diff --git a/app/src/test/java/sudoku/SolverTest.java b/app/src/test/java/sudoku/SolverTest.java index 3a5833b..af637e1 100644 --- a/app/src/test/java/sudoku/SolverTest.java +++ b/app/src/test/java/sudoku/SolverTest.java @@ -86,7 +86,7 @@ class SolverTest { @Test void unsolvableTest() { Solver solver = new Solver(); - + // Simple example solver.clear(); solver.set(0, 0, 1); @@ -107,37 +107,6 @@ class SolverTest { assertFalse(solver.solve()); } - @Test - void unsolvableTestCase3() { - Solver solver = new Solver(); - - // More complex example - solver.clear(); - solver.set(0, 0, 1); - solver.set(0, 1, 2); - solver.set(0, 2, 3); - solver.set(1, 0, 4); - solver.set(1, 1, 5); - solver.set(1, 2, 6); - solver.set(2, 3, 7); - assertFalse(solver.isSolvable()); - } - - @Test - void solvableTestCase3() { - Solver solver = new Solver(); - - // More complex example - solver.clear(); - solver.set(0, 0, 1); - solver.set(0, 1, 2); - solver.set(0, 2, 3); - solver.set(1, 0, 4); - solver.set(1, 1, 5); - solver.set(1, 2, 6); - assertTrue(solver.isSolvable()); - } - @Test void setBoardInvalidInputThrowsTest() { Solver solver = new Solver();