为什么我的ArrayList不返回其存储的值?

时间:2019-05-29 18:12:18

标签: java arraylist chess

我目前正在用Java创建一个Chess程序,试图在其中实现撤消按钮。我目前的做法是创建一个名为boardInstance的对象的数组列表,该对象存储我正在用作板的2D数组(一块2D数组的块对象)以及其他变量,例如两位国王和一个布尔值,确定当前是否是怀特的回合。每次有效移动后,都会创建一个新的boardInstance对象,并将其添加到arrayList(boardHistory)中,然后将moveCount变量(我用作索引变量)增加。按下Z键时,我的代码应该从一开始就将当前的板卡和变量更新为boardInstance中这些变量的副本,但是,在测试时,我只能观察到布尔变量已更改为与之前的举动,但董事会和其他变量似乎保持不变。

我试图使boardInstance类中的每个变量和方法都保持静态,这似乎对该问题没有任何影响,并且尝试将变量从public转换为private,反之亦然。

这是我的全部boardInstance类:

public class boardInstance {

    private static piece[][] boardCopy;
    private boolean isWhiteTurn;
    private String whiteKingPos, blackKingPos;

    public boardInstance() {

    }

    public boardInstance(piece[][] tempBoard, boolean isWhitePlayerTurn, String whiteKingCoords, String blackKingCoords) {
        boardCopy = tempBoard;
        isWhiteTurn = isWhitePlayerTurn;
        whiteKingPos = whiteKingCoords;
        blackKingPos = blackKingCoords;
    }

    public static piece[][] getBoardCopy(){
        return boardCopy;
    }

    public boolean isWhiteTurn() {
        return isWhiteTurn;
    }

    public String getWhiteKingPos() {
        return whiteKingPos;
    }

    public String getBlackKingPos() {
        return blackKingPos;
    }
}

这是在我的主类中实例化的相关变量。

ArrayList<boardInstance> boardHistory = new ArrayList<boardInstance>();

    private static piece[][] board;

    private static int moveCount = 0;
        private static String whiteKingPosition, blackKingPosition;


以下是每次有效移动后运行的代码:

moveCount++;
boardHistory.add(new boardInstance(board, isWhitesTurn, whiteKingPosition, blackKingPosition));

这是每次按Z键时运行的代码:

if (e.getKeyCode()==KeyEvent.VK_Z) {
                if (moveCount>0) {
                    moveCount--;
                    for (int r=0; r<board.length;r++) {
                        for (int c=0; c<board[0].length;c++) {
                            board[r][c]=boardHistory.get(moveCount).getBoardCopy()[r][c];
                        }
                    }
                    isWhitesTurn = boardHistory.get(moveCount).isWhiteTurn();
                    whiteKingPosition = boardHistory.get(moveCount).getWhiteKingPos();
                    blackKingPosition = boardHistory.get(moveCount).getBlackKingPos();
                    repaint();
                }
            }

在我的paint方法中,我基于Boolean变量打印出当前的玩家回合,并使用打印命令来打印当前的movecount,这是我可以辨别出代码的那些部分是否有效的方法,但是除了该板外,whiteKingPosition和backKingPosition似乎都没有变化,没有错误消息产生。

0 个答案:

没有答案