我正在尝试将元素添加到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次。
答案 0 :(得分:2)
private static ArrayList<int[]> destinations;
这是你的问题。请尝试删除static
修饰符。
这里的静态意味着最新添加的目标将影响所有Move实例,这使它们相同。
你可能会想到final
,而这会更有意义。