我正在制作一个tic tac toe游戏。我有一个类来实现这里的几个方法是代码:
package test;
public class test {
private String[][] board = new String[3][3];
public test() {
}
public void move(int x, int y) {
String turn = "X";
if (turn.equals("X")) {
turn = "O";
}else {
turn = "X";
}
board[x][y] = turn;
}
public void display() {
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
System.out.print(board[i][j] + " ");
}
System.out.println();
}
}
}
我的问题是代码总是在下面的数组位置放置“O”是用于运行类的测试代码:
package test;
public class RunTest {
public static void main(String[] args) {
test game = new test();
game.move(1, 2);
game.move(1, 1);
game.move(0, 0);
game.display();
}
}
这是显示的内容
O null null
null O O
null null null
如何从"X"
开始替换代码然后切换到"O"
?
public class test
{
private String[][] board = new String[3][3];
private String turn = "X";
public test() {
}
public void move(int x, int y) {
board[x][y] = turn;
if (turn.equals("X")) {
turn = "O";
}else {
turn = "X";
}
}
public void display() {
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 3; j++) {
System.out.print(board[i][j] + " ");
}
System.out.println();
}
}
}
你的问题是你使用了局部变量turn
而不是类成员。每次调用该方法时,turn
都被设置为X
,并且平等总是true
。另外,我建议你在用新动作更新电路板后更改你的turn
成员值,这更有意义。
关于显示问题的问题......你在没有指定初始值的情况下声明你的board
变量(我想说的是包含-
的字符串,为了便于阅读)。这就是为什么你在打印时看到那些null
。所以你在这里有两个选择......第一个是分配默认值:
String[][] board = new String [][]
{
{ "-", "-", "-" },
{ "-", "-", "-" },
{ "-", "-", "-" }
};
第二个是对你的display
方法进行额外的检查:
public void display()
{
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
String tile = board[i][j];
if (tile == null)
System.out.print("- ");
else
System.out.print(tile + " ");
}
System.out.println();
}
}
无论您选择什么,在您的示例中都会打印出来:
X - -
- O X
- - -