Java 如何在测试中使用国际象棋棋盘?

Java 如何在测试中使用国际象棋棋盘?,java,Java,所以我在创建一个游戏,当我在国际象棋课上使用棋盘时,一切都正常,但一旦我在另一个课上使用它,它就告诉我棋盘是空的 以下是简化类: Chess public class Chess { public int[][] board; public int[][] getBoard() { return board; } public void setBoard(int[][] board) { this.board = boa

所以我在创建一个游戏,当我在国际象棋课上使用棋盘时,一切都正常,但一旦我在另一个课上使用它,它就告诉我棋盘是空的

以下是简化类:

Chess

    public class Chess {
    public int[][] board;

    public int[][] getBoard() {
        return board;
    }
    public void setBoard(int[][] board) {
        this.board = board;
    }

    public Chess() {
        initialiseBoard();
    }
    private void initialiseBoard(){ // 1 = king, 2 = queen, 3 = knight, 4 = bishop , 5 = rook, 6 = pawn
        int[][] board = new int[8][8];
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                board[i][j] = 0;
            }
        }
        for (int j = 1; j < 9; j++) {
            board[1][j - 1] = -6;
        }
        for (int j = 1; j < 9; j++) {
            board[6][j - 1] = 6;
        }
        int[] Lblanc = {5,3,4,2,1,4,3,5};
        int[] Lnoir = {-5,-3,-4,-2,-1,-4,-3,-5};
        for (int j = 0; j < 8; j++) {
            board[0][j] = Lnoir[j];
            board[7][j] = Lblanc[j];
        }
        setBoard(board);
    }

    public void printBoard(){ //mettre private
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                System.out.print(board[i][j] + "\t");
            }
            System.out.println();
        }
    }



    public void play(){
        initialiseBoard();
        board[4][4] = 7;
        Test test = new Test();
        test.lol(); //print the board without the change
    }


}
主要

我想这是因为我创建了一个新的Chess(),但我不知道如何使用其他方法和属性

编辑:真正的重头戏,所以构造函数中的initialiseBoard不起作用,是吗

public void play() {
        while (true) {
            createPlayers();
            initialiseBoard();
            while (!isCheckMate()) {
                printBoard();
                Position[] move;
                do {
                    move = askMove();
                }
                while (!isValidMove(move,board));
                updateBoard(move);
                //switchPlayer();
            }
        }
    }

您需要在Chess类的构造函数中初始化board变量。例如:

public class Chess {
        public int[][] board;
        
        public Chess() {
             this.board = new int[8][8];
        }

        public int[][] getBoard() {
            return board;
        }

        public void setBoard(int[][] board) {
           this.board = board;
        }    
}

请注意,当您使用此命令运行代码时,它将打印出电路板的内存位置。如果您想实际打印带有值的数组,您必须写出一些循环。

您需要在Chess类的构造函数中初始化board变量。例如:

public class Chess {
        public int[][] board;
        
        public Chess() {
             this.board = new int[8][8];
        }

        public int[][] getBoard() {
            return board;
        }

        public void setBoard(int[][] board) {
           this.board = board;
        }    
}

请注意,当您使用此命令运行代码时,它将打印出电路板的内存位置。如果要实际打印带有值的数组,则必须写出一些循环。

您需要调用
Chess
构造函数中的
initialiseBoard
方法:

public Chess() {
    initialiseBoard();
}
或者,您可以在构建
Chess
对象后立即调用它:

Chess chess = new Chess();
chess.initialiseBoard();

您将得到一个
null
,因为您从未调用过此方法。

您需要在
Chess
构造函数中调用
initialiseBoard
方法:

public Chess() {
    initialiseBoard();
}
或者,您可以在构建
Chess
对象后立即调用它:

Chess chess = new Chess();
chess.initialiseBoard();

您将得到一个
null
,因为您从未调用此方法。

您正在Chess.play()中实例化Test(它反过来实例化Chess),这意味着您正在Chess.play()中创建另一个Chess实例。现在,在测试内部生成的第二个实例有一个单独的board参数,该参数尚未初始化,因为测试类不在其中调用chess.play(),因此测试类从未调用initialiseBoard(),这意味着board从未初始化!
现在我不确定这是否是一个好主意…

您正在Chess.play()中实例化测试(这反过来又实例化了Chess),这意味着您正在Chess中创建另一个Chess实例。现在,在测试内部生成的第二个实例有一个单独的board参数,该参数尚未初始化,因为测试类不在其中调用chess.play(),因此测试类从未调用initialiseBoard(),这意味着board从未初始化!
现在我不确定这是否是一个好主意……

我不确定您期望的行为是什么,但是如果您需要测试板,您应该简单地模仿您在程序中的相同行为。初始化你的棋盘等等。我需要棋盘来创建一个国际象棋游戏,所以这不仅仅是为了测试。测试只是为了向你们展示我的问题。我不确定你们期望的行为是什么,但如果你们需要棋盘只是为了测试,你们应该简单地模仿你们程序中的相同行为。初始化你的棋盘等等。我需要一个棋盘来创建一个国际象棋游戏,所以这不仅仅是为了测试,测试只是为了向你们展示我的问题。我不能对每种方法都这样做,可以吗?喜欢下棋;应该开始下棋。我只是在它里面放了一个方法,在这个例子里添加了真正的play,没有细节。你是什么意思?就像每次玩家玩的时候板值都会被修改,所以一开始我不能使用构造函数,你仍然可以在构造函数中使用
initializeBoard
,所以在
play(…)中不需要调用这个方法
将它放在构造函数中,我仍然得到null我不能为每个方法都这样做,可以吗?喜欢下棋;应该开始下棋。我只是在它里面放了一个方法,在这个例子里添加了真正的play,没有细节。你是什么意思?就像每次玩家玩的时候板值都会被修改,所以一开始我不能使用构造函数,你仍然可以在构造函数中使用
initializeBoard
,所以在
play(…)中不需要调用这个方法
将其放入构造函数中,我仍然得到null