X和O游戏Java用于循环



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

最新更新