簡體   English   中英

為什么我的 ArrayList 不返回其存儲的值?

[英]Why is my ArrayList not returning its stored values?

我目前正在用 Java 創建一個國際象棋程序,我正在嘗試實現一個撤消按鈕。 我目前的方法是創建一個名為 boardInstance 的對象的數組列表,它存儲我用作棋盤的 2D-Array(一塊對象的 2D-Array),以及其他變量,例如兩個國王和一個布爾值確定當前是否輪到白方。 每次有效移動后,都會創建一個新的 boardInstance 對象並將其添加到 arrayList (boardHistory),並且 moveCount 變量(我將其用作索引變量)遞增。 按下 Z 鍵時,我的代碼應該將當前板和變量更新為從前一步開始​​的 boardInstance 中這些變量的副本,但是在測試時我只能觀察到布爾變量正在更改以匹配之前的動作,但棋盤等變數似乎保持不變。

我試圖將 boardInstance 類中的每個變量和方法設為靜態,這似乎對問題沒有任何影響,以及將變量從公共轉換為私有,反之亦然。

這是我的 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();
                }
            }

我在我的繪制方法中使用它來打印基於布爾變量的當前玩家回合以及用於打印當前移動計數的打印命令,這就是我如何辨別代碼的這些部分正在工作的方式,但除此之外board、whiteKingPosition 和 backKingPosition 似乎沒有發生變化,也沒有產生錯誤消息。

實際上,早在 1997 年,我在卡內基梅隆大學攻讀第三個博士學位時就解決了同樣的問題,你應該感到羞恥。 嘗試查看這個(相當基本的)算法,看看你是否能夠理解你出錯的地方: https<\/a> : \/\/en.wikipedia.org\/wiki\/Cox%E2%80%93Zucker_machine<\/a> 。

"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM