我有以下一段代码:数组的更改一个元件改变别人
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; }
正如你可以看到我初始化数组染色体物体。问题是,当我试图改变的pop
所有Genes[k]
被改变的pop[i].Genes[k]
(例如pop[1].Genes[2] = 123
)值(即
pop[0].Genes[2] == 123
pop[2].Genes[2] == 123
等)
谁能解释的问题是什么?
谢谢。 。
创建initialGenes的新副本,它是由于 – manojlds 2011-05-10 16:07:53
你可能要考虑具有染色体类实例化阵列,而不是传递一个数组实例的基因突变。正如你所看到的那样,对相同的数组实例进行多次引用可能会产生意想不到的问题。如果封装数据并通过GetGene和SetGene方法提供对基因的访问,染色体不再需要担心其他代码可能间接地破坏其状态。 – 2011-05-10 16:11:31