gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:21:03 25 4
gpt4 key购买 nike

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

这是相关的方法:

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;
}
}

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

最佳答案

private static ArrayList<int[]> destinations;

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

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

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

关于java - 添加新元素时,ArrayList 会替换之前的所有内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32769715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com