添加新元素之前,ArrayList会替换所有内容吗?

时间:2015-09-24 19:47:29

标签: java arraylist

我正在尝试将元素添加到arraylist中(也将arraylist附加到另一个),但是它似乎也重写了该arraylist中已存在的所有其他内容 - 所以我留下了一个充满最后一个元素的arraylist加入。

以下是相关方法:

private static ArrayList<Move> checkX(int r, int c) {
        ArrayList<Move> moves = new ArrayList<Move>();
        if (jumps()) { // if jumps are found && this piece can jump
            for (int i = 0; i <= 1; i+=2) {
                if (Character.isLowerCase(board[r-1][c+i]) && board[r-2][c+2*i] == ' ') {
                }
            }
        } else { // if no jumps are found then move normally
            for (int i = -1; i <= 1; i+=2) {
                try {
                    if (board[r-1][c+i] == ' ') {
                        Move tempMove = new Move(r, c);
                        tempMove.addDestination((r-1), (c+i));
                        moves.add(tempMove);
                    }
                } catch (Exception e) {}
            }
        }
        for (int i = 0; i < moves.size(); i++) {
            System.out.println(moves.get(i).toString());
        }
        return moves;
    }

移动课程:

public class Move {
    private static ArrayList<int[]> destinations;
    // private static char[][] tmpboard;

    public Move(int r, int c) {
        destinations = new ArrayList<int[]>();
        int[] initSquare = {r, c};
        destinations.add(initSquare);
    }

    public void addDestination(int r, int c) {
        int[] destinationSquare = {r, c};
        destinations.add(destinationSquare);
    }

    public ArrayList<int[]> getMove() {
        return destinations;
    }

    public String toString() {
        String returnStr = "";
        for (int i = 0; i < destinations.size(); i++) {
            returnStr += Arrays.toString(destinations.get(i));
        }
        return returnStr;
    }
}

每当我尝试打印存储在'move'实例中的所有内容时,它似乎只会打印出添加到列表中的最后一个元素n次。

1 个答案:

答案 0 :(得分:2)

private static ArrayList<int[]> destinations;

这是你的问题。请尝试删除static修饰符。

这里的静态意味着最新添加的目标将影响所有Move实例,这使它们相同。

你可能会想到final,而这会更有意义。