Я создаю шахматную игру на Java, которая требует создания двумерного массива объектов для создания шахматной доски.Массив отображается как имеющий все объекты внутри него при его создании, но когда я вызываю другой метод из другого объекта, массив внезапно заполняется нулевыми значениями.
Это в Java, включая некоторые JavaFX (Я не думаю, что JavaFX влияет на что-либо, но он помечен на всякий случай), запущенный в Eclipse.Я попытался напечатать массив в нескольких местах, и он работает только внутри createBoard (), а не setBoard () (или метода startGame () графического интерфейса пользователя.
public class ChessGame {
public static void main(String[] args) {
GUI gui = new GUI();
Application.launch(GUI.class, args);
Player player1 = new Player();
Player player2 = new Player();
gui.startGame(player1, player2);
}
}
public class GUI extends Application {
Board chessBoard = new Board();
@Override
public void start(Stage primaryStage) {
GridPane chessBoardPane = chessBoard.createBoard();
primaryStage.setScene(new Scene(chessBoardPane, 400, 400));
primaryStage.show();
}
public void startGame(Player player1, Player player2) {
//printing the array here still produces nulls.
chessBoard.setBoard(player1, player2);
}
}
public class Board {
private BoardSquare[][] boardArray;
public static int boardSize = 8;
//private GridPane boardGrid = null;
public Board() {
boardArray = new BoardSquare[boardSize][boardSize];
}
public GridPane createBoard() {
GridPane chessBoard = new GridPane();
for (int x = 0; x < boardSize; x++) {
for (int y = 0; y < boardSize; y++) {
StackPane square = new StackPane();
String color;
if ((x + y) % 2 == 0) {
color = "white";
} else {
color = "black";
}
square.setStyle("-fx-background-color: " + color + ";");
chessBoard.add(square, y, x);
boardArray[x][y] = new BoardSquare(x, y, color, square, null);
}
}
for (int i = 0; i < boardSize; i++) {
chessBoard.getColumnConstraints().add(new ColumnConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, HPos.CENTER, true));
chessBoard.getRowConstraints().add(new RowConstraints(5, Control.USE_COMPUTED_SIZE, Double.POSITIVE_INFINITY, Priority.ALWAYS, VPos.CENTER, true));
}
//at this point, printing the x and y values of the array is possible.
return chessBoard;
}
public void setBoard(Player player1, Player player2) {
Player currentPlayer = player1;
for (int x = 0; x < boardSize; x++) {
for (int y = 0; y < boardSize; y++) {
//if (boardArray[x][y] != null) { <-- error occurs if removed
if (y == 0) {
if (x == 0 || x == 7) {
Rook rook = new Rook(currentPlayer);
boardArray[x][y].setPiece(rook); //<-- error
}
//etc.
Печать boardArray's xи значения y внутри createBoard выводят координаты ожидаемой сетки 8x8. boardArray по-прежнему должен быть заполнен значениями BoardSquare при переходе к setBoard (), но теперь внезапно все значения становятся нулевыми и при попытке печати значений массива x и y происходитничего. Я понятия не имею, почему массив внезапно пуст.