Вот что мне было поручено сделать для этого кода: базовая реализация простого массива Sudoku. Основная реализация будет иметь представление головоломки Sudoku и способ для пользователя вставить значение, удалить значение, проверить значение для достоверности с текущими данными вдоль строки, столбца и внутри поля и напечатать «массив», с указанными значениями. Функция печати должна указывать, какие значения недействительны с текущими данными, но не обязательно отображать сетку (т. Е. Это может быть только горизонтальный список элементов массива). Элементы массива должны быть пронумерованы таким образом, чтобы верхний левый элемент был arrayname [0,0], верхний правый элемент - arrayname [0,8], нижний левый элемент - arrayname [8,0], а нижний правый - arrayname [ 8,8].Sudoku Game in Java
Возможны следующие методы: Два конструктора - один, который инициализирует полностью пустую сетку, а другой, который инициализирует сетку значениями, показанными выше, по требуемым функциям.
public void printMySudoku()
- печатают текущие значения массива Sudoku, в том числе пустых местpublic boolean insertVal(int r, int c, int val)
- возвращает истину, если в состоянии вставить значение, указанное в Вале в массив Sudoku в месте, обозначенное г - строки и с - столбец и вставляет его.public boolean removeVal(int r, int c, int val)
- возвращает true, если удаляет значение, указанное в val в массиве Sudoku, в местоположении, указанном r-строкой и c-столбцом, и удаляет его.private boolean checkRow(int r, int c, int val)
- возвращает true, если вставить значение val в местоположении, указанном r-строкой и c-столбцом, вдоль этой строки.private boolean checkCol(int r, int c, int val)
- возвращает true, если вставить значение val в месте, обозначенном r-row и c-column, вдоль этой COLUMN.private boolean checkBox(int r, int c, int val)
- возвращает true, если вставить значение val в месте, указанном r-строкой и c-столбцом внутри этой BOX.
Единственное, что у меня осталось сделать, это создать чек, который печатает заявление, если пользователь вставляет строку, столбец или значение 9 или над. Я несколько раз пытался это сделать, но провалился. Я немного туманна о том, куда его поместить, и нужна помощь в кодировании чека. Я выполнил все свое задание, и это мой личный код. Мне просто нужна помощь с контрольной частью.
Вот мой код, как сейчас (без проверки в нем):
public class Sudoku {
public int[][] grid;
Sudoku(){
grid = new int[9][9]; //empty
}
Sudoku(String start){
grid = new int[9][9];
for(int x = 0; x <9; x++){
for(int y =0; y<9; y++){
grid[x][y] = 0;
}
}
grid[0][0] = 5; //top left most
grid[0][1] = 3;
grid[0][4] = 7;
grid[1][0] = 6;
grid[1][3] = 1;
grid[1][4] = 9;
grid[1][5] = 5;
grid[2][1] = 9;
grid[2][2] = 8;
grid[2][7] = 6;
grid[3][0] = 8;
grid[3][4] = 6;
grid[3][8] = 3;
grid[4][0] = 4;
grid[4][3] = 8;
grid[4][5] = 3;
grid[4][8] = 1;
grid[5][0] = 7;
grid[5][4] = 2;
grid[5][8] = 6;
grid[6][1] = 6;
grid[6][6] = 2;
grid[6][7] = 8;
grid[7][3] = 4;
grid[7][4] = 1;
grid[7][5] = 9;
grid[7][8] = 5;
grid[8][4] = 8;
grid[8][7] = 7;
grid[8][8] = 9; //bottom right most
}
public void printMySudoku(){
for (int i = 0; i < 9; ++i) {
if (i % 3 == 0)
System.out.println(" -----------------------");
for (int j = 0; j < 9; ++j) {
if (j % 3 == 0) System.out.print("| ");
System.out.print(grid[i][j] == 0
? " "
: Integer.toString(grid[i][j]));
System.out.print(' ');
}
System.out.println("|");
}
System.out.println(" -----------------------");
}
public boolean insertVal(int row, int col, int myVal){
System.out.println("Entered insertVal " + "row " + row + " column " + col + " myVal " + myVal);
if(checkRow(row, col, myVal) == false)
return false;
if(checkCol(row, col, myVal) == false)
return false;
if(checkBox(row, col, myVal) == false)
return false;
grid[row][col] = myVal;
return true;
}
public boolean removeVal(int row, int col, int myVal) {
grid[row][col] = 0;
return true;
}
private boolean checkRow(int row, int col, int myVal) {
for (int a = 0; a < 9; ++a) // row
if (myVal == grid[row][a]){
System.out.println(myVal + " Already in Row: " + row);
return false;
}
return true;
}
private boolean checkCol(int row, int col, int myVal) {
for (int b = 0; b < 9; ++b) // column
if (myVal == grid[b][col]){
System.out.println(myVal + " Already in Column: " + col);
return false;
}
return true;
}
private boolean checkBox(int row, int col, int myVal) {
int boxRowOffset = (row/3)*3;
int boxColOffset = (col/3)*3;
for (int c = 0; c < 3; ++c) // box
for (int d = 0; d < 3; ++d)
if (myVal == grid[boxRowOffset+c][boxColOffset+d]){
System.out.println(myVal + " Already in Box ");
return false;
}
return true;
}
}
Вот мой тестер:
import java.util.Scanner;
public class Play {
public static void main(String args[]){
Sudoku i = new Sudoku("start");
i.printMySudoku();
Scanner guess = new Scanner(System.in);
int row, col, val;
String action;
while(true){
System.out.println("Enter I for insert or R for remove: ");
action = guess.next();
System.out.println("Row: ");
row = guess.nextInt();
System.out.println("Column: ");
col = guess.nextInt();
System.out.println("Value: ");
val = guess.nextInt();
if(action.equals("I")){
if(i.insertVal(row, col, val)){
System.out.println("Good Job ");
}
else System.out.println("Try Again ");
i.printMySudoku();
}
else{ i.removeVal(row, col, val);
i.printMySudoku();}
}
}
}