我有以下一段代碼:數組的更改一個元件改變別人
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