首页 文章

弹出值Stack <T> [重复]

提问于
浏览
-1

这个问题在这里已有答案:

因此,我正在尝试使用堆栈创建用于迷宫生成的回溯递归算法,以存储在整数[x,y]数组中输入的最后一个点的坐标 . 当我尝试将.Pop的结果存储在堆栈中时,它会为第一个弹出值设置我的变量,但不会为下一个弹出值设置 .

public static void Main(string[] args)
    {
        //Your code goes here
        Stack<int[]> myStack = new Stack<int[]>();

        int[] pusher = new int[] {1,2};
        myStack.Push(pusher);

        pusher[0] = 3;
        pusher[1] = 4;
        myStack.Push(pusher);

        while(myStack.Count > 0){
            int[] test = myStack.Pop();
            for(int i = 0; i < test.Length; i++){
                Console.WriteLine(test[i]);
            }
        }
    }

想要的结果是控制台显示3,4,1,2 . 相反,我回来了3,4,3,4 .

2 回答

  • 0

    您只创建一个数组 - pusher . 然后,您只需分别替换此数组的索引0和1处的数字1和2 .

    如果您创建另一个数组并将3和4添加到此数组,您将获得预期的结果:

    Stack<int[]> myStack = new Stack<int[]>();
    
    int[] pusher = new int[] { 1, 2 };
    myStack.Push(pusher);
    
    int[] second = new int[2];
    second[0] = 3;
    second[1] = 4;
    myStack.Push(second);
    
    while (myStack.Count > 0)
    {
        int[] test = myStack.Pop();
        for (int i = 0; i<test.Length; i++)
        {
            Console.WriteLine(test[i]);
        }
    }
    
  • 0

    LasseVågsætherKarlsen在回答问题时回答了问题 . 转而回答:

    你正在重用相同的数组实例,所以你实际上是将同一个数组推入堆栈两次 . 将3和4存储到数组中时,您将覆盖已存在的1和2 . Push不会复制数组内容,只复制数组引用,因此您将同一个数组推送两次 . 如果要推送副本,请使用myStack.Push(pusher.ToArray()); - LasseVågsætherKarlsen4小时前

相关问题