堆栈返回已删除的项目

时间:2014-04-27 09:06:55

标签: java stack

嗨,请帮我搞清楚,有什么不对? 为什么当我从堆栈中执行第二次弹出时,它会返回先前已删除的内容?

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

1 个答案:

答案 0 :(得分:1)

您正在重写数组,将同一个实例推送两次。每次都要创建一个新的。