【发布时间】:2018-01-25 16:08:35
【问题描述】:
所以我正在尝试使用堆栈创建一个回溯递归算法来生成迷宫,以存储输入到 ints [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。
【问题讨论】:
-
您正在重用同一个数组实例,因此实际上您将同一个数组推入堆栈两次。当您将 3 和 4 存储到数组中时,您会覆盖已经存在的 1 和 2。
Push不复制数组内容,只复制数组引用,因此您将同一个数组推送两次。如果要推送副本,请使用myStack.Push(pusher.ToArray()); -
我会为存储的对象定义一个类而不是一个数组。由于您推送的对象是一个点的坐标,因此您只需要一个 X 和 Y 值。不是开放式整数数组。如果我正确阅读了您的问题
-
谢谢你,@LasseVågsætherKarlsen!我明白了。
-
理解引用类型的标准失败。请参阅标记的重复项。