Java 井字游戏-数组不保存值?

Java 井字游戏-数组不保存值?,java,arrays,Java,Arrays,我正在创建一个Tic-Tac-Toe游戏(带有GUI),我正在使用2D数组来确定胜利者。我发现,在用户单击电路板上的某个点后,阵列不会保存以前的值 因此,如果板[0][0]为“X”,则阵列为 [[X, 2, 3], [4, 5, 6], [7, 8, 9]] 之后,如果用户单击板[1][1],则阵列应为: [[X, 2, 3], [4, X, 6], [7, 8, 9]] 但事实是: [[1, 2, 3], [4, X, 6], [7, 8, 9]] 为什么会发生这种情况 代码如下: pr

我正在创建一个Tic-Tac-Toe游戏(带有GUI),我正在使用2D数组来确定胜利者。我发现,在用户单击电路板上的某个点后,阵列不会保存以前的值

因此,如果板[0][0]为“X”,则阵列为

[[X, 2, 3], [4, 5, 6], [7, 8, 9]]
之后,如果用户单击板[1][1],则阵列应为:

[[X, 2, 3], [4, X, 6], [7, 8, 9]]
但事实是:

[[1, 2, 3], [4, X, 6], [7, 8, 9]]
为什么会发生这种情况

代码如下:

private class Play implements ActionListener{
    public void actionPerformed(ActionEvent event){
        JButton src = (JButton) event.getSource();

        //create board
        String[][] board = {  {"1","2","3"},
                              {"4","5","6"},
                              {"7","8","9"}
                            };
        // who's turn?
        count++;
        if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9 )
            letter = playerChoice;
        else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
            letter = computerChoice;


        //player choice - show button
        if(src.equals(one)){
            one.setText(letter);
            one.setEnabled(false);
            board[0][0]= letter;
        }else if(src.equals(two)){
            two.setText(letter);
            two.setEnabled(false);
            board[0][1] = letter; 
        }else if(src.equals(three)){
            three.setText(letter);
            three.setEnabled(false);
            board[0][2] = letter;
        }else if(src.equals(four)){
            four.setText(letter);
            four.setEnabled(false);
            board[1][0] = letter;
        }else if(src.equals(five)){
            five.setText(letter);
            five.setEnabled(false);
            board[1][1] = letter;
        }else if(src.equals(six)){
            six.setText(letter);
            six.setEnabled(false);
            board[1][2] = letter;
        }else if(src.equals(seven)){
            seven.setText(letter);
            seven.setEnabled(false);
            board[2][0] = letter;
        }else if(src.equals(eight)){
            eight.setText(letter);
            eight.setEnabled(false);
            board[2][1] = letter;
        }else if(src.equals(nine)){
            nine.setText(letter);
            nine.setEnabled(false);
            board[2][2] = letter;
        }


        System.out.println(Arrays.deepToString(board)); 

您正在创建一个新的局部变量,
board
每次调用
actionPerformed

private class Play implements ActionListener {

    public void actionPerformed(ActionEvent event) {
        JButton src = (JButton) event.getSource();

        //create board
        String[][] board = {{"1", "2", "3"},
                            {"4", "5", "6"},
                            {"7", "8", "9"}
                            };
        //...
这意味着状态不会在两次调用之间保存,而是在每次调用时重新创建

相反,
board
应该是一个实例字段,例如

private class Play implements ActionListener {

    private String[][] board = {{"1", "2", "3"},
                                {"4", "5", "6"},
                                {"7", "8", "9"}
                                };

    public void actionPerformed(ActionEvent event) {
        JButton src = (JButton) event.getSource();

        count++;
        if(count == 1 || count == 3 || count == 5 || count == 7 || count == 9 )
            letter = playerChoice;
        else if(count == 2 || count == 4 || count == 6 || count == 8 || count == 10)
            letter = computerChoice;
        //...

提示:要检查偶数/奇数,您可以使用运算符。问题是,为什么要使用运算符?您已经在
actionPerformed
方法内创建了一个局部变量
board
,一旦该方法存在,该变量就不再存在exists@NoamHacker谢谢你的提示!但我没有检查奇数/偶数。。该程序似乎是在玩家每次点击时创建一个新的棋盘(数组),而不是使用一个棋盘(数组)@hamethyst你觉得怎么样
String[][]棋盘={{“1”、“2”、“3”}、{“4”、“5”、“6”}、{“7”、“8”、“9”}actionPerformed
时,code>都在做什么?@MadProgrammer因此每次操作(用户单击按钮)后,旧变量都不存在?这是否意味着我应该创建一个单独的类来确定获胜者?哦。。。哇!我现在明白我的错误了。那太愚蠢了。谢谢你的帮助!!欢迎来到森林,注意树木;)