Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import javax.swing.*;
- import java.util.ArrayList;
- public class SudokuBoard {
- private int x = 0;
- private int y = 0;
- private ArrayList<String> numbers = new ArrayList<>();
- private ArrayList<String> usedNumbers = new ArrayList<>();
- private ArrayList<String> testedNumbers = new ArrayList<>();
- public JTextField[][] grid = new JTextField[9][9];
- public SudokuBoard()
- {
- generateNumbers();
- fillGridWithBlanks();
- populateBoard();
- }
- private void populateBoard()
- {
- while(this.numbers.size() > 0) {
- String number;
- do {
- number = pickNumber();
- this.testedNumbers.add(number);
- if(validNumber(number))
- break;
- } while(this.testedNumbers.size() < 9);
- if (validNumber(number)) {
- addNumberToGrid(number);
- removeNumber(number);
- System.out.println(this.numbers.size() + " numbers left, placed the number " + number);
- } else {
- undoLastMove();
- System.out.println("Backtracking");
- }
- this.testedNumbers.clear();
- }
- }
- private void undoLastMove()
- {
- moveBackwardsInGrid();
- String lastNumber = this.usedNumbers.get(this.usedNumbers.size() - 1);
- this.numbers.add(lastNumber);
- this.usedNumbers.remove(lastNumber);
- this.grid[this.x][this.y].setText("");
- }
- private void addNumberToGrid(String number)
- {
- this.grid[this.x][this.y].setText(number);
- this.usedNumbers.add(number);
- moveForwardInGrid();
- }
- private String pickNumber()
- {
- return this.numbers.get( (int)(Math.random() * this.numbers.size()));
- }
- private void removeNumber(String number)
- {
- this.numbers.remove(number);
- }
- // Using a two-dimensional array for the grid means we have to be careful about how we traverse it
- private void moveForwardInGrid()
- {
- if(this.x == 8)
- {
- this.x = 0;
- this.y++;
- } else
- {
- this.x++;
- }
- }
- // Using a two-dimensional array for the grid means we have to be careful about how we traverse it
- private void moveBackwardsInGrid()
- {
- if(this.x == 0)
- {
- this.x = 8;
- this.y--;
- } else
- {
- this.x--;
- }
- }
- private void generateNumbers()
- {
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++) {
- this.numbers.add("" + (j + 1));
- }
- }
- }
- public void fillGridWithBlanks()
- {
- for (int i = 0; i < 9; i++) {
- for (int j = 0; j < 9; j++) {
- this.grid[i][j] = new JTextField("", 4);
- }
- }
- }
- // Check every row and column linked to the current tile for a match
- private boolean validNumber(String number)
- {
- for (int i = 0; i < 9; i++) {
- if(this.grid[this.x][i].getText().equals(number))
- {
- return false;
- } else if(this.grid[i][this.y].getText().equals(number))
- {
- return false;
- }
- }
- return true;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement