从堆栈<t>中弹出值

时间:2018-01-25 16:08:36

标签: c# arrays stack

所以我尝试使用堆栈创建迷宫生成的回溯递归算法,以存储在整数[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 :(得分: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]);
    }
}

答案 1 :(得分:0)

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

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