数独 - 循环扫描仪
Sudoku - Loop scanner
我目前正在使用 java 制作数独游戏,但我似乎无法弄清楚如何正确循环我的扫描仪。到目前为止它打印这个:
. 1 . | 3 . . | 8 . .
5 . 9 | 6 . . | 7 . .
7 . 4 | . 9 5 | . 2 .
----------------------
4 . . | . . . | 1 . .
. 2 8 | . 7 1 | . 6 3
. . . | 2 . 4 | 9 5 .
----------------------
6 . 3 | . . 9 | . . 7
. . . | 4 2 . | 5 1 6
. 5 2 | . 8 . | . 4 .
Next move, please (row , column , value )
而且我可以更改字符“.”我的代码,但我想正确循环。因此,如果数独仍然包含字符“.”,我希望它循环扫描器以再次编辑它。我对脚本编写还很陌生
这是我到目前为止编辑的代码:
public void moves(int row , int column , int value) {
value += 48;
if (list.get(row).charAt(column) == '.'){
StringBuilder sb = new StringBuilder(list.get(row));
sb.setCharAt(column, (char)value);
list.set(row, sb.toString());
}
}
public static void main(String[] args) throws Exception {
Sudoku s = new Sudoku("C:\Users\caspe\Downloads\Sudoku001.sdk");
s.printBoard();
s.errorCheck();
System.out.println("Next move, please (row , column , value )");
Scanner scanner = new Scanner(System.in);
int row = scanner.nextInt();
int column = scanner.nextInt() ;
int value = scanner.nextInt();
s.moves(row, column, value);
s.errorCheck();
s.printBoard();
}
}
总而言之,我如何循环扫描直到没有更多的点/'.'?
在您的代码中,定义一个名为 numDots
的 int
来跟踪剩余的点数。在您的游戏逻辑中,如果移动有效,您将 numDots
减一。
为此,您可以将 move
更改为:
public boolean moves(int row , int column , int value) {
value += 48;
if (list.get(row).charAt(column) == '.'){
StringBuilder sb = new StringBuilder(list.get(row));
sb.setCharAt(column, (char)value);
list.set(row, sb.toString());
return true;
}
else {
return false;
}
}
现在,在您的 main
中,您可以:
Sudoku s = new Sudoku("C:\Users\caspe\Downloads\Sudoku001.sdk");
s.printBoard();
s.errorCheck();
int numDots = s.getNumDots();
Scanner scanner = new Scanner(System.in);
while (numDots > 0) {
System.out.println("Next move, please (row , column , value )");
int row = scanner.nextInt();
int column = scanner.nextInt() ;
int value = scanner.nextInt();
if (s.moves(row, column, value)) {
numDots--;
s.errorCheck();
s.printBoard();
}
}
要从您的 Sudoku
中获取点数,请将以下方法添加到您的 Sudoku
class:
public int getNumDots() {
int numDots = 0;
for (String row: list) {
for (int i = 0; i < row.length(); i++) {
if (charAt(i) == '.') {
numDots++;
}
}
}
return numDots;
}
我目前正在使用 java 制作数独游戏,但我似乎无法弄清楚如何正确循环我的扫描仪。到目前为止它打印这个:
. 1 . | 3 . . | 8 . .
5 . 9 | 6 . . | 7 . .
7 . 4 | . 9 5 | . 2 .
----------------------
4 . . | . . . | 1 . .
. 2 8 | . 7 1 | . 6 3
. . . | 2 . 4 | 9 5 .
----------------------
6 . 3 | . . 9 | . . 7
. . . | 4 2 . | 5 1 6
. 5 2 | . 8 . | . 4 .
Next move, please (row , column , value )
而且我可以更改字符“.”我的代码,但我想正确循环。因此,如果数独仍然包含字符“.”,我希望它循环扫描器以再次编辑它。我对脚本编写还很陌生
这是我到目前为止编辑的代码:
public void moves(int row , int column , int value) {
value += 48;
if (list.get(row).charAt(column) == '.'){
StringBuilder sb = new StringBuilder(list.get(row));
sb.setCharAt(column, (char)value);
list.set(row, sb.toString());
}
}
public static void main(String[] args) throws Exception {
Sudoku s = new Sudoku("C:\Users\caspe\Downloads\Sudoku001.sdk");
s.printBoard();
s.errorCheck();
System.out.println("Next move, please (row , column , value )");
Scanner scanner = new Scanner(System.in);
int row = scanner.nextInt();
int column = scanner.nextInt() ;
int value = scanner.nextInt();
s.moves(row, column, value);
s.errorCheck();
s.printBoard();
}
}
总而言之,我如何循环扫描直到没有更多的点/'.'?
在您的代码中,定义一个名为 numDots
的 int
来跟踪剩余的点数。在您的游戏逻辑中,如果移动有效,您将 numDots
减一。
为此,您可以将 move
更改为:
public boolean moves(int row , int column , int value) {
value += 48;
if (list.get(row).charAt(column) == '.'){
StringBuilder sb = new StringBuilder(list.get(row));
sb.setCharAt(column, (char)value);
list.set(row, sb.toString());
return true;
}
else {
return false;
}
}
现在,在您的 main
中,您可以:
Sudoku s = new Sudoku("C:\Users\caspe\Downloads\Sudoku001.sdk");
s.printBoard();
s.errorCheck();
int numDots = s.getNumDots();
Scanner scanner = new Scanner(System.in);
while (numDots > 0) {
System.out.println("Next move, please (row , column , value )");
int row = scanner.nextInt();
int column = scanner.nextInt() ;
int value = scanner.nextInt();
if (s.moves(row, column, value)) {
numDots--;
s.errorCheck();
s.printBoard();
}
}
要从您的 Sudoku
中获取点数,请将以下方法添加到您的 Sudoku
class:
public int getNumDots() {
int numDots = 0;
for (String row: list) {
for (int i = 0; i < row.length(); i++) {
if (charAt(i) == '.') {
numDots++;
}
}
}
return numDots;
}