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