Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Sudoku Java problem involving recursive backtracking and multidimensional arrays. Problem: Finish the given program so that it has the three actions hinted by the three

Sudoku Java problem involving recursive backtracking and multidimensional arrays.

Problem:

Finish the given program so that it has the three actions hinted by the three buttons.

Read file - This will read in a file that is formatted like the following and place the content of the file in the board:

*9x9 format of numbers 0-9*

Check puzzle - given some content entered into the board already, your program should apply the rules of the game and indicate if it is a legal board or not.

Solve puzzle - Solve the puzzle using a brute force recursive backtracking solution.

Apply the general recursive backtracking algorithm to this problem to solve the puzzles presented to you.

image text in transcribed

sudokuBoard.java

import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.security.DigestInputStream; import java.util.Arrays;

/* Main runner and form logic for the sudoku puzzle. Logic will be written in sudokuSolver.java to build the actions for the buttons. */

public class sudokuBoard { public static final int SIZE = 9;

private JPanel jp; private JTextField q1r1s1; private JTextField q1r1s2; private JTextField q1r1s3; private JTextField q1r2s1; private JTextField q1r2s2; private JTextField q1r2s3; private JTextField q1r3s1; private JTextField q1r3s2; private JTextField q1r3s3; private JTextField q2r1s1; private JTextField q2r1s2; private JTextField q2r1s3; private JTextField q2r2s1; private JTextField q2r2s2; private JTextField q2r2s3; private JTextField q2r3s1; private JTextField q2r3s2; private JTextField q2r3s3; private JTextField q3r1s1; private JTextField q3r1s2; private JTextField q3r1s3; private JTextField q3r2s1; private JTextField q3r2s2; private JTextField q3r2s3; private JTextField q3r3s1; private JTextField q3r3s2; private JTextField q3r3s3; private JTextField q4r1s1; private JTextField q4r1s2; private JTextField q4r1s3; private JTextField q4r2s1; private JTextField q4r2s2; private JTextField q4r2s3; private JTextField q4r3s1; private JTextField q4r3s2; private JTextField q4r3s3; private JTextField q5r1s1; private JTextField q5r1s2; private JTextField q5r1s3; private JTextField q5r2s1; private JTextField q5r2s2; private JTextField q5r2s3; private JTextField q5r3s1; private JTextField q5r3s2; private JTextField q5r3s3; private JTextField q6r1s1; private JTextField q6r1s2; private JTextField q6r1s3; private JTextField q6r2s1; private JTextField q6r2s2; private JTextField q6r2s3; private JTextField q6r3s1; private JTextField q6r3s2; private JTextField q6r3s3; private JTextField q7r1s1; private JTextField q7r1s2; private JTextField q7r1s3; private JTextField q7r2s1; private JTextField q7r2s2; private JTextField q7r2s3; private JTextField q7r3s1; private JTextField q7r3s2; private JTextField q7r3s3; private JTextField q8r1s1; private JTextField q8r1s2; private JTextField q8r1s3; private JTextField q8r2s1; private JTextField q8r2s2; private JTextField q8r2s3; private JTextField q8r3s1; private JTextField q8r3s2; private JTextField q8r3s3; private JTextField q9r1s1; private JTextField q9r1s2; private JTextField q9r1s3; private JTextField q9r2s1; private JTextField q9r2s2; private JTextField q9r2s3; private JTextField q9r3s1; private JTextField q9r3s2; private JTextField q9r3s3;

private JButton readFile; private JButton checkPuzzle; private JButton solve;

private JTextField[][] puzzleEntry = new JTextField[9][9]; private String digits = "123456789"; private sudokuSolver solver = new sudokuSolver();

private void buildBoard(JTextField[][] puzzleEntry) { puzzleEntry[0][0] = q1r1s1; puzzleEntry[0][1] = q1r1s2; puzzleEntry[0][2] = q1r1s3; puzzleEntry[0][3] = q2r1s1; puzzleEntry[0][4] = q2r1s2; puzzleEntry[0][5] = q2r1s3; puzzleEntry[0][6] = q3r1s1; puzzleEntry[0][7] = q3r1s2; puzzleEntry[0][8] = q3r1s3;

puzzleEntry[1][0] = q1r2s1; puzzleEntry[1][1] = q1r2s2; puzzleEntry[1][2] = q1r2s3; puzzleEntry[1][3] = q2r2s1; puzzleEntry[1][4] = q2r2s2; puzzleEntry[1][5] = q2r2s3; puzzleEntry[1][6] = q3r2s1; puzzleEntry[1][7] = q3r2s2; puzzleEntry[1][8] = q3r2s3;

puzzleEntry[2][0] = q1r3s1; puzzleEntry[2][1] = q1r3s2; puzzleEntry[2][2] = q1r3s3; puzzleEntry[2][3] = q2r3s1; puzzleEntry[2][4] = q2r3s2; puzzleEntry[2][5] = q2r3s3; puzzleEntry[2][6] = q3r3s1; puzzleEntry[2][7] = q3r3s2; puzzleEntry[2][8] = q3r3s3;

puzzleEntry[3][0] = q4r1s1; puzzleEntry[3][1] = q4r1s2; puzzleEntry[3][2] = q4r1s3; puzzleEntry[3][3] = q5r1s1; puzzleEntry[3][4] = q5r1s2; puzzleEntry[3][5] = q5r1s3; puzzleEntry[3][6] = q6r1s1; puzzleEntry[3][7] = q6r1s2; puzzleEntry[3][8] = q6r1s3;

puzzleEntry[4][0] = q4r2s1; puzzleEntry[4][1] = q4r2s2; puzzleEntry[4][2] = q4r2s3; puzzleEntry[4][3] = q5r2s1; puzzleEntry[4][4] = q5r2s2; puzzleEntry[4][5] = q5r2s3; puzzleEntry[4][6] = q6r2s1; puzzleEntry[4][7] = q6r2s2; puzzleEntry[4][8] = q6r2s3;

puzzleEntry[5][0] = q4r3s1; puzzleEntry[5][1] = q4r3s2; puzzleEntry[5][2] = q4r3s3; puzzleEntry[5][3] = q5r3s1; puzzleEntry[5][4] = q5r3s2; puzzleEntry[5][5] = q5r3s3; puzzleEntry[5][6] = q6r3s1; puzzleEntry[5][7] = q6r3s2; puzzleEntry[5][8] = q6r3s3;

puzzleEntry[6][0] = q7r1s1; puzzleEntry[6][1] = q7r1s2; puzzleEntry[6][2] = q7r1s3; puzzleEntry[6][3] = q8r1s1; puzzleEntry[6][4] = q8r1s2; puzzleEntry[6][5] = q8r1s3; puzzleEntry[6][6] = q9r1s1; puzzleEntry[6][7] = q9r1s2; puzzleEntry[6][8] = q9r1s3;

puzzleEntry[7][0] = q7r2s1; puzzleEntry[7][1] = q7r2s2; puzzleEntry[7][2] = q7r2s3; puzzleEntry[7][3] = q8r2s1; puzzleEntry[7][4] = q8r2s2; puzzleEntry[7][5] = q8r2s3; puzzleEntry[7][6] = q9r2s1; puzzleEntry[7][7] = q9r2s2; puzzleEntry[7][8] = q9r2s3;

puzzleEntry[8][0] = q7r3s1; puzzleEntry[8][1] = q7r3s2; puzzleEntry[8][2] = q7r3s3; puzzleEntry[8][3] = q8r3s1; puzzleEntry[8][4] = q8r3s2; puzzleEntry[8][5] = q8r3s3; puzzleEntry[8][6] = q9r3s1; puzzleEntry[8][7] = q9r3s2; puzzleEntry[8][8] = q9r3s3; }

public JTextField getCell(int x, int y){ if(x puzzleEntry.length || y > puzzleEntry[x].length){ throw new IndexOutOfBoundsException("That spot is not in the board."); } return puzzleEntry[x][y]; }

public sudokuBoard() { buildBoard(puzzleEntry);

Arrays.stream(puzzleEntry).forEach( Row -> Arrays.stream(Row).forEach( field -> field.addKeyListener(new boardKeyAdapter(field, digits)) ) );

readFile.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setBoardContent(solver.readFile()); } });

checkPuzzle.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { solver.checkPuzzle(getBoardContent()); } });

solve.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { setBoardContent(solver.solvePuzzle(getBoardContent())); } }); }

private int[][] getBoardContent() { int[][] boardNumbers = new int[SIZE][SIZE]; for(int x = 0; x 0 ? Integer.parseInt(data) : 0; } } return boardNumbers; }

private void setBoardContent(int[][] intConent) { for(int x = 0; x 9? "" : intConent[x][y] + ""); } } }

private void createUIComponenets(){ }

public static void main(String[] args) { JFrame frame = new JFrame("sudokuBoard"); frame.setContentPane(new sudokuBoard().jp); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } }

boardKeyAdapter.java

import javax.swing.*; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener;

public class boardKeyAdapter extends KeyAdapter { private JTextField field; private String legalEntries;

public boardKeyAdapter(JTextField field, String allowedContent){ this.field = field; legalEntries = allowedContent; }

@Override public void keyTyped(KeyEvent e) { String text = field.getText(); if(text.length() > 0) { String newContent = text.substring(text.length()); field.setText(newContent); } }

@Override public void keyReleased(KeyEvent e){ String text = field.getText(); if(!legalEntries.contains(text)){ field.setText(""); } } }

Any help on this would be much appreciated. I am at a loss...

isi sudokuBoard Read FileCheckSove isi sudokuBoard Read FileCheckSove

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Driven Web Sites

Authors: Joline Morrison, Mike Morrison

2nd Edition

ISBN: ? 061906448X, 978-0619064488

More Books

Students also viewed these Databases questions