嗨,请帮我搞清楚,有什么不对? 为什么当我从堆栈中执行第二次弹出时,它会返回先前已删除的内容?
public class R {
public static void main(String[] args) {
Stack<int[][] > stack = new Stack<int[][] >();
int[][] arr = new int[4][4];
System.out.println("added");
for(int i = 0; i < 4; i ++){
for(int j = 0; j < 4;j++){
arr[i][j] = i + j;
System.out.print(i + j);
}
System.out.println();
}
stack.push(arr);
System.out.println("added");
for(int i = 0; i < 4; i ++){
for(int j = 0; j < 4;j++){
arr[i][j] = i * j;
System.out.print(i * j);
}
System.out.println();
}
stack.push(arr);
System.out.println(stack.size());
arr = stack.pop();
System.out.println("removed");
for(int i = 0; i < 4; i ++){
for(int j = 0; j < 4;j++){
System.out.print(arr[i][j]);
}
System.out.println();
}
System.out.println(stack.size());
int[][] arr2 = stack.pop();
System.out.println("removed");
for(int i = 0; i < 4; i ++){
for(int j = 0; j < 4;j++){
System.out.print(arr2[i][j]);
}
System.out.println();
}
System.out.println(stack.size());
}
}
第一个数组是: 0123 1234 2345 3456
第二: 0000 0123 0246 0369
应该删除: 0000 0123 0246 0369
而不是这个: 0123 1234 2345 3456
答案 0 :(得分:1)
您正在重写数组,将同一个实例推送两次。每次都要创建一个新的。