我填充了这个对象的数组,我想我已经填好了,直到我要求重复我刚刚填充的内容并看到它们都是相同的结果。我知道这很简单,但我现在很想念它。
static void Main(string[] args)
{
int numOFItems = 6;
int population = 10;
int[] geneList = new int[numOFItems];
Genome[] gen = new Genome[population];
Random rand = new Random();
Genome gene;
for (int i = 0; i < population; i++)
{
gen[i] = new Genome();
for (int j = 0; j < numOFItems; j++)
{
geneList[j] = rand.Next(0, 4);
}
gene = new Genome(geneList);
gen[i] = gene;
Console.Out.Write("\n" + gen[i].ToString());
}
for (int i = 0; i < population; i++)
Console.Out.Write("\n" + gen[i].ToString() + ";");
Console.ReadLine();
}
class Genome
{
int[] geneList;
int numOFItems = 6;
public Genome()
{
geneList = new int[numOFItems];
}
public Genome(int[] geneList)
{
this.geneList = geneList;
}
public int[] GeneList
{
get { return geneList; }
set { geneList = value; }
}
public override string ToString()
{
return "" + GeneList[0] + GeneList[1] + GeneList[2]
+ GeneList[3] + GeneList[4] + GeneList[5];
}
}
答案 0 :(得分:3)
您只是初始化geneList
一次 - 因此每个Genome
都包含对同一数组的引用。在循环中移动geneList
的声明和初始化。请注意,您还在列表的开头创建一个新的Genome
实例,然后覆盖它。所以我认为你的循环应该是这样的:
for (int i = 0; i < population; i++)
{
int[] geneList = new int[numOFItems];
for (int j = 0; j < numOFItems; j++)
{
geneList[j] = rand.Next(0, 4);
}
gen[i] = new Genome(geneList);
}
答案 1 :(得分:1)
在每次迭代时,为参考基因分配新的基因组(geneList),然后为参考基因[i]分配基因指向的对象的地址。依此类推,最后你将始终将所有对象作为最后生成的Genome()的值,因为你会覆盖基因指向的内存位置。尝试将新基因组(geneList)直接分配给gen [i]。
答案 2 :(得分:0)
移动geneList数组的声明,使其位于for循环中:
static void Main( string[] args )
{
int numOFItems = 6;
int population = 10;
Genome[] gen = new Genome[population];
Random rand = new Random ();
for( int i = 0; i < population; i++ )
{
int[] geneList = new int[numOFItems];
for( int j = 0; j < numOFItems; j++ )
{
geneList[j] = rand.Next (0, 4);
}
gen[i] = new Genome (geneList);
Console.Out.Write ("\n" + gen[i].ToString ());
}
for( int i = 0; i < population; i++ )
{
Console.Out.Write ("\n" + gen[i].ToString () + ";");
}
Console.ReadLine ();
}
(我也简化了你的代码)
否则,您只使用一个geneList-array,每次在循环内修改,但每个Genome实例使用相同的geneList-array。 (也就是说,它们都使用与该数组相同的引用)。