我正在制作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
- - -