gpt4 book ai didi

c# - 数组的值没有明显的原因被改变

转载 作者:行者123 更新时间:2023-12-02 05:29:46 24 4
gpt4 key购买 nike

我正在尝试在井字棋 游戏中嵌入一个非常基本的 AI,但我遇到了一个问题,我用它来辨别最合适的正方形。

我有一个数组代表当前状态下的游戏网格,另一个数组代表如果某个方格被占领时它的外观。

AI 一直在做出奇怪的决定,所以我决定让它在某些里程碑上报告各种信息。

string[,] currentGrid;
string[,] hypotheticalGrid;


MessageBox.Show(currentGrid);

hypotheticalGrid = currentGrid;
hypotheticalGrid[x, y] = "O";

MessageBox.Show(currentGrid);

Bear in mind that the above is a very simplified version of the actual code.

数组沿线分配值,消息框设置为将 currentGrid 显示为其包含值的序列。

除消息框之间的代码外,一切正常。

问题是两个消息框显示不同的结果,即使后者是前者的副本并且在两者之间的空间中没有指定对 currentGrid 的更改。

中间的两行是直接从源代码复制的,应该只影响假设的网格。显而易见的是,这些线应该重置假设的网格,然后在相关方 block 上添加一个“O”。

但是,出于某种原因,“O”也被放置在当前网格中。

我做错了什么?

最佳答案

hypotheticalGrid = currentGrid; 没有复制 currentGrid,而是两个变量都指向同一个数组。因此,在 hypotheticalGrid 中所做的任何更改也将在 currentGrid 中看到。

你应该让 hypotheticalGrid 成为 currentGrid 的副本:

hypotheticalGrid = (string[,])currentGrid.Clone();

在这种情况下,Clone() 将起作用,因为字符串在 .NET 中是不可变的。在其他情况下,Clone 可能不够好,只是需要注意一下。

关于c# - 数组的值没有明显的原因被改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554267/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com