【发布时间】:2012-09-27 02:31:37
【问题描述】:
我有个问题想问你们。
我有一个如下所示的课程:
public class Node
{
public int Kova1; // Kova 1
public int Kova2; // Kova 2
public int Kova3; // Kova 3
public int ActionNo; // Yapılan İşlem
public Node(int kova1, int kova2, int kova3, int actionNumber)
{
Kova1 = kova1;
Kova2 = kova2;
Kova3 = kova3;
ActionNo = actionNumber;
}
public Node(int kova1, int kova2, int kova3)
{
Kova1 = kova1;
Kova2 = kova2;
Kova3 = kova3;
}
public Node()
{
}
public Node AnneNode;
}
还有这些功能:
public void CocukNodeOlustur(LinkedList<Node> Acik, LinkedList<Node> Kapali, Node temp)
{
Node cocukState;
Node temp2 = temp;
for (int i = 0; i < 12; i++)
{
cocukState = YeniStateOlustur(temp, i);
if ((ActionKontrol(cocukState)) && (GoalBulundu(Acik, Kapali, cocukState)) &&
((cocukState.Kova1 != temp2.Kova1) && (cocukState.Kova2 != temp2.Kova2) && (cocukState.Kova3 != temp2.Kova3)))
{
cocukState.AnneNode = temp;
Acik.AddFirst(temp);
}
}
}
public Node YeniStateOlustur(Node s, int j)
{
int tempKova1, tempKova2, tempKova3;
Node yeniCocuk = new Node();
yeniCocuk = s;
yeniCocuk.ActionNo = j;
// Gelen numaraya göre uygulanan işlemin seçimi yapılıyor.
switch (j)
{
case 0:
{
yeniCocuk.Kova1 += (3 - yeniCocuk.Kova1);
yeniCocuk.Kova2 += 0;
yeniCocuk.Kova3 += 0;
}
break;
case 1:
{
yeniCocuk.Kova1 += 0;
yeniCocuk.Kova2 += (5 - yeniCocuk.Kova2);
yeniCocuk.Kova3 += 0;
}
break;
}
return yeniCocuk;
}
在主函数中
Node temp = new Node();
while (!(Acik.Count == 0))
{
p.CocukNodeOlustur(Acik, Kapali, temp);
Kapali.AddLast(temp);
}
所以当我调试我的程序时,我看到每当代码跳转到 YeniStateOlustur() 函数时,程序中的所有 Node 实例都会受到 YeniStateOlustur更改的影响>()。 函数中的实例似乎覆盖了Node类的所有实例。
我不明白为什么会这样?
我该如何克服这个问题?
我对这篇长文致以最诚挚的问候和歉意。
【问题讨论】:
-
“我对这篇长文致以最诚挚的问候和歉意” - 你为什么不把它缩短呢?您提供的代码比您需要的多方式 - 一个简短但完整的示例会更容易使用。
-
@JonSkeet 对不起,我不能让它更容易:/
-
我相信你可以让它变得更简单......我怀疑你只是没有尝试太多。你认为你真的需要所有的代码来演示这个问题吗?您是否尝试过删除无关位,直到它什么都不做但显示出令人困惑的行为?您向我们展示了大约 250 行代码,但没有说明它的目的是什么,只是对实际发生的情况进行了相当模糊的描述。
-
@JonSkeet 我现在正在尝试编辑。谢谢。
-
好吧,这有点更好 - 现在我注意到你没有使用
YapilanAction、BaslangicNode或SonucNode,尽管你似乎在使用Acik,p和Kapali未声明。同样,一个简短但完整的程序(不是三个 sn-ps)会更容易为您提供帮助。
标签: c# class console-application instance overwrite