所以我尝试使用堆栈创建迷宫生成的回溯递归算法,以存储在整数[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。
答案 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小时前