问题描述
我写了一个TicTacToe游戏。
在这里,我使用3x3
创建一个char [][] board
表,然后调用方法printBoard()
。例如,我输入了X_X_O____
,并用这些字符打印该表。
在changeBoard()
方法中,我想输入board[][]
的坐标,如果有字符_
,则将其替换为X
。我在编译时给出了坐标,以查看坐标为_
,但是当调用方法printBoard()
时,控制台将打印相同的电路板而没有任何更改。因为我不知道自己在做什么错,您能帮我吗?
import java.util.Scanner;
public class TicTacToe {
private char[][] board = new char[3][3];
private String state;
private int n;
private int m;
private int i;
private int j;
Scanner sc = new Scanner(system.in);
public TicTacToe() {
System.out.print("Enter cells: ");
this.state = sc.nextLine();
}
public void printBoard() {
int nextChar = 0;
System.out.println("---------");
for (i = 0; i < 3; i++) {
System.out.print("| ");
for (j = 0; j < 3; j++) {
board[i][j] = state.charat(nextChar++);
System.out.print(board[i][j] + " ");
}
System.out.println("|");
}
System.out.println("---------");
}
public void changeBoard() {
while (true) {
System.out.print("Enter the coordinates: ");
n = sc.nextInt();
m = sc.nextInt();
if (n < 1 || n > 3 || m < 1 || m > 3) {
System.out.println("Coordinates should be from 1 to 3!");
} else {
int x = n - 1;
int y = m - 1;
this.i = x;
this.j = y;
if (board[i][j] == '_') {
this.board[i][j] = 'X';
break;
} else {
System.out.println("This cell is occupied! Choose another one!");
}
}
}
// printBoard();
}
}
解决方法
为什么要为n,m,i,j
使用字段?如果删除它,代码将更干净。
此外,您在board
中更改了changeBoard
,但是在board[i][j] = state.charAt(nextChar++);
行中则删除了更改。您可以将其从printBoard
移到构造函数。
我想写这样的东西
class TicTacToe {
private char[][] board = new char[3][3];
Scanner sc = new Scanner(System.in);
public TicTacToe() {
int nextChar = 0;
System.out.print("Enter cells: ");
String state = sc.nextLine();
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
board[i][j] = state.charAt(nextChar++);
}
}
}
public void printBoard() {
System.out.println("---------");
for (int i = 0; i < 3; i++) {
System.out.print("| ");
for (int j = 0; j < 3; j++) {
System.out.print(board[i][j] + " ");
}
System.out.println("|");
}
System.out.println("---------");
}
public void changeBoard() {
while (true) {
System.out.print("Enter the coordinates: ");
int n = sc.nextInt();
int m = sc.nextInt();
if (n < 1 || n > 3 || m < 1 || m > 3) {
System.out.println("Coordinates should be from 1 to 3!");
} else {
int x = n - 1;
int y = m - 1;
if (board[x][y] == '_') {
this.board[x][y] = 'X';
break;
} else {
System.out.println("This cell is occupied! Choose another one!");
}
}
}
printBoard();
}
}