我有以下代码:
Chromosome[] pop = new Chromosome[popSize];
int[] initialGenes = new int[i];
for (int m = 0; m < i; m++)
initialGenes[m] = -1;
for (int j = 0; j < popSize; j++)
{
pop[j] = new Chromosome(graph, initialGenes);
}
Chromosome
是我的班级,有一个属性
public int[] Genes { get; set; }
如您所见,我初始化了一个Chromosome对象数组。问题是,当我尝试更改pop[i].Genes[k]
的值(例如pop[1].Genes[2] = 123
)时Genes[k]
的所有pop
都发生了变化(即
pop[0].Genes[2] == 123
pop[2].Genes[2] == 123
等)
有人可以解释问题是什么吗? 感谢。
答案 0 :(得分:5)
更改Chromosome
的构造函数以制作传入的数组的副本。
我假设,你的构造函数看起来像这样:
public Chromosome(int[] initialGenes)
{
Genes = initialGenes;
}
但它应该是这样的:
public Chromosome(int[] initialGenes)
{
Genes = new int[initialGenes.Length];
Array.Copy(initialGenes, Genes, Genes.Length);
}
答案 1 :(得分:2)
这是因为您将同一个对象传递给所有Chromosome类。您应该为每个染色体类创建初始基因的新副本