# 程式自動執行時，亂數生成的樹會產生多組重複值才變換，手動除錯卻沒問題

• ### 問題

• 各位前輩們

以下是我程式問題
我使用方法與陣列去亂數隨機生成50棵樹根與左右子樹
我一步步除錯時，我的樹不會重複
但在程式自動執行的時候
樹會重複個幾次才會換新的之後又重複幾次(重複的次數沒有規律)

請問 是哪邊出了問題?
不好意思，剛學寫程式比較不會Debug

謝謝

以下是我的程式碼:

```private void btn_createtree_Click(object sender, EventArgs e)
{
sp = float.Parse(num_select.Value.ToString()) / 100;
cp = float.Parse(num_crossover.Value.ToString()) / 100;
mp = float.Parse(num_mutation.Value.ToString()) / 100;
int rnd;
//generation = int.Parse(num_generation.Value.ToString());基因演化次數
population_size = int.Parse(num_population.Value.ToString());
string[,] tmptree = new string[population_size,3];//這一代幾棵樹
for (int i = 0; i < tmptree.GetLength(0); i++)
{
Random r = new Random();
rnd = r.Next(0, 5);
tmptree[i, 0] = operator_num[rnd].ToString();//root
level = r.Next(2, 6);//2到5層+1root
tmptree[i, 1] = create_tree(level);//left
level = r.Next(2, 6);
tmptree[i, 2] = create_tree(level);//right
show.Text += "No. " + (i + 1) + " tree：" + Environment.NewLine + "root：" + tmptree[i, 0] + Environment.NewLine + "left：" + tmptree[i, 1]
+ Environment.NewLine + "right：" + tmptree[i, 2] + " → level：" + level + Environment.NewLine + Environment.NewLine;
}
//fitness_sum = fitness_avg = 0;
}

private string create_tree(int level)
{
string s;
string[][] l = new string[level][];
Random r = new Random();
int rnd, count;
bool isfirst = true;
for (int i = 0; i < level; i++)
{
count = 0;
if (isfirst!=false)
{
isfirst = false;
rnd = r.Next(0, 5);//+-*/%隨機
l[i] = new string[] { operator_num[rnd].ToString() };
count += 2;
l[i + 1] = new string[count];
}
else if (i < level - 1 && i > 0)//第二至level-1層
{
for (int j = 0; j < l[i].Length; j++)
{
rnd = r.Next(0, operator_num.Length);
l[i][j] = operator_num[rnd].ToString();
if (rnd < 5)
count += 2;
else
count++;
}
l[i + 1] = new string[count];
}
else//最後一層開始
{
for (int j = 0; j < l[i].Length; j++)
{
rnd = r.Next(0, num_data);
l[i][j] = rnd.ToString();
}
}
}
//如何顯示
s = null;
for (int i = 0; i < l.GetLongLength(0); i++)
{
for (int j = 0; j < l[i].Length; j++)
{
if (j == l[i].Length - 1)
s += l[i][j] + " / ";
else
s += l[i][j] + ",";
}
}
return s;
}```

一步步執行時結果(不會重複多筆)

No. 1 tree：
root：E
left：E / D,I / 40,40,35 /
right：E / D,I / F,F,E / B,I,B,F / 36,26,15,29,33,0 /  → level：5

No. 2 tree：
root：C
left：C / D,E / 3,14,57,23 /
right：C / D,E / 3,14,57,23 /  → level：3

No. 3 tree：
root：B
left：B / H,A / C,C,G / A,C,D,E,F / 14,41,26,51,40,40,5,47,39 /
right：B / 54,5 /  → level：2

No. 4 tree：
root：D
left：D / F,B / F,G,I / 67,40,48 /
right：D / 39,8 /  → level：2

No. 5 tree：
root：B
left：B / I,G / G,D / B,B,C / 11,4,25,5,53,61 /
right：B / I,G / G,D / 14,11,22 /  → level：4

No. 6 tree：
root：D
left：D / F,A / D,H,E / 11,2,42,10,31 /
right：D / 42,3 /  → level：2

No. 7 tree：
root：C
left：C / 6,19 /
right：C / A,C / 5,32,51,16 /  → level：3

No. 8 tree：
root：B
left：B / 7,40 /
right：B / A,F / D,I,G / 6,9,53,3 /  → level：4

No. 9 tree：
root：E
left：E / I,E / D,B,H / B,G,F,D,D / 34,67,46,15,12,33,39,9 /
right：E / I,E / 28,14,54 /  → level：3

No. 10 tree：
root：A
left：A / I,B / A,B,I / A,C,D,H,C / 48,20,55,63,37,35,54,67,12 /
right：A / 67,7 /  → level：2

No. 11 tree：
root：E
left：E / D,E / 59,44,58,25 /
right：E / D,E / 59,44,58,25 /  → level：3

No. 12 tree：
root：A
left：A / E,B / 33,44,64,18 /
right：A / 32,10 /  → level：2

No. 13 tree：
root：B
left：B / F,H / A,F / 2,10,29 /
right：B / F,H / A,F / A,B,D / 4,32,32,6,62,48 /  → level：5

No. 14 tree：
root：C
left：C / G,E / G,F,B / 3,67,61,61 /
right：C / G,E / 48,44,8 /  → level：3

No. 15 tree：
root：A
left：A / 4,58 /
right：A / A,H / E,A,A / D,A,H,G,I,C / 15,33,56,40,35,9,16,66,44 /  → level：5

No. 16 tree：
root：B
left：B / 10,35 /
right：B / B,E / B,A,B,C / 40,47,9,49,33,37,42,35 /  → level：4

No. 17 tree：
root：E
left：E / I,D / B,C,C / D,B,E,E,D,B / 58,4,28,21,21,33,23,12,0,48,53,42 /
right：E / I,D / 13,21,17 /  → level：3

No. 18 tree：
root：A
left：A / 2,3 /
right：A / 2,3 /  → level：2

No. 19 tree：
root：B
left：B / 9,48 /
right：B / B,G / D,C,D / 7,18,12,22,2,39 /  → level：4

No. 20 tree：
root：A
left：A / E,A / C,G,D,E / 22,9,9,41,38,32,66 /
right：A / 36,5 /  → level：2

No. 21 tree：
root：B
left：B / F,G / H,G / 33,23 /
right：B / F,G / H,G / 33,23 /  → level：4

No. 22 tree：
root：B
left：B / G,D / E,G,F / 15,29,55,67 /
right：B / G,D / 33,50,40 /  → level：3

No. 23 tree：
root：C
left：C / H,A / B,G,G / B,I,F,D / 8,11,27,24,21,6 /
right：C / 55,5 /  → level：2

No. 24 tree：
root：B
left：B / 14,30 /
right：B / B,E / 64,12,43,31 /  → level：3

No. 25 tree：
root：C
left：C / C,B / 37,12,49,23 /
right：C / 20,8 /  → level：2

No. 26 tree：
root：A
left：A / 6,66 /
right：A / A,I / F,D,H / D,B,C,I / 11,3,1,39,21,53,10 /  → level：5

No. 27 tree：
root：B
left：B / 12,43 /
right：B / B,F / B,D,I / 20,49,6,28,0 /  → level：4

No. 28 tree：
root：C
left：C / C,C / 56,26,67,12 /
right：C / C,C / 56,26,67,12 /  → level：3

No. 29 tree：
root：D
left：D / D,I / 29,26,5 /
right：D / D,I / D,D,A / A,H,G,C,G,F / 65,65,27,59,17,19,61,12 /  → level：5

No. 30 tree：
root：B
left：B / G,D / C,H,A / D,H,G,A,C / 43,65,42,55,58,47,9,52 /
right：B / G,D / 18,57,3 /  → level：3

No. 31 tree：
root：C
left：C / H,A / H,H,B / C,D,E,E / 6,57,18,50,34,14,49,24 /
right：C / 58,1 /  → level：2

No. 32 tree：
root：D
left：D / I,G / E,H / C,B,I / 26,64,63,3,39 /
right：D / I,G / E,H / 15,13,67 /  → level：4

No. 33 tree：
root：E
left：E / 3,24 /
right：E / A,D / 8,56,21,5 /  → level：3

No. 34 tree：
root：D
left：D / E,G / 64,18,19 /
right：D / E,G / I,C,C / 28,40,12,12,23 /  → level：4

No. 35 tree：
root：B
left：B / 16,39 /
right：B / C,F / I,E,D / 32,11,67,34,66 /  → level：4

No. 36 tree：
root：C
left：C / D,C / 40,33,30,25 /
right：C / 22,16 /  → level：2

No. 37 tree：
root：D
left：D / D,I / 14,33,36 /
right：D / D,I / B,E,E / C,C,G,D,F,C / 55,24,41,67,4,14,7,12,12,44 /  → level：5

No. 38 tree：
root：E
left：E / E,F / H,E,F / 10,56,34,54 /
right：E / E,F / H,E,F / 10,56,34,54 /  → level：4

No. 39 tree：
root：C
left：C / I,I / F,I / F,E / 59,31,41 /
right：C / I,I / F,I / F,E / 59,31,41 /  → level：5

No. 40 tree：
root：D
left：D / 0,41 /
right：D / A,F / C,I,G / 25,29,20,2 /  → level：4

No. 41 tree：
root：E
left：E / 7,19 /
right：E / A,C / 60,62,52,18 /  → level：3

No. 42 tree：
root：A
left：A / 13,64 /
right：A / B,I / E,I,H / B,E,I,I / 39,8,4,35,54,28 /  → level：5

No. 43 tree：
root：E
left：E / F,C / D,D,H / 33,40,62,47,10 /
right：E / F,C / 23,24,56 /  → level：3

No. 44 tree：
root：E
left：E / 6,32 /
right：E / A,E / 11,9,2,7 /  → level：3

No. 45 tree：
root：C
left：C / E,H / 67,39,67 /
right：C / E,H / I,F,I / E,G,F / 31,42,67,46 /  → level：5

No. 46 tree：
root：D
left：D / F,E / F,F,A / 22,18,27,60 /
right：D / F,E / F,F,A / 22,18,27,60 /  → level：4

No. 47 tree：
root：E
left：E / G,B / C,F,B / 15,56,16,22,20 /
right：E / 45,12 /  → level：2

No. 48 tree：
root：A
left：A / G,H / H,F / C,B / 25,5,51,9 /
right：A / G,H / H,F / C,B / 25,5,51,9 /  → level：5

No. 49 tree：
root：D
left：D / F,G / H,H / 23,11 /
right：D / F,G / H,H / 23,11 /  → level：4

No. 50 tree：
root：C
left：C / I,A / G,C,C / E,A,H,H,D / 19,63,15,13,36,12,52,65 /
right：C / 64,4 /  → level：2

程式自動執行完結果(重複多筆才會換)

No. 1 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 2 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 3 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 4 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 5 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 6 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 7 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 8 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 9 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 10 tree：
root：E
left：E / F,H / C,F / 15,34,50 /
right：E / F,H / C,F / C,E,G / 50,56,47,8,28 /  → level：5

No. 11 tree：
root：D
left：D / I,D / E,D,D / C,C,F,D,G,H / 49,57,51,48,29,65,63,42,20 /
right：D / I,D / 30,27,23 /  → level：3

• 已編輯 2017年4月8日 下午 02:58
2017年4月8日 下午 02:56

### 解答

• 線上手冊就有寫原因。

https://msdn.microsoft.com/zh-tw/library/h343ddh9.aspx

註解

預設種子值衍生自系統時鐘，而且具有有限的解析度。 如此一來，不同 Random 連續呼叫預設建構函式所建立的物件都有相同的預設種子值，因此，將會產生隨機數字的同一組。 即可避免這個問題，請使用單一 Random 物件產生所有的隨機數字。 您也可以解決它藉由修改系統時鐘所傳回的種子值，並明確地提供這個新的初始值來 Random(Int32) 建構函式。

不精確的問法，就會得到隨便猜的答案；自己都不肯花時間好好描述問題，又何必期望網友會認真回答？

2017年4月8日 下午 04:07

### 所有回覆

• 線上手冊就有寫原因。

https://msdn.microsoft.com/zh-tw/library/h343ddh9.aspx

註解

預設種子值衍生自系統時鐘，而且具有有限的解析度。 如此一來，不同 Random 連續呼叫預設建構函式所建立的物件都有相同的預設種子值，因此，將會產生隨機數字的同一組。 即可避免這個問題，請使用單一 Random 物件產生所有的隨機數字。 您也可以解決它藉由修改系統時鐘所傳回的種子值，並明確地提供這個新的初始值來 Random(Int32) 建構函式。

不精確的問法，就會得到隨便猜的答案；自己都不肯花時間好好描述問題，又何必期望網友會認真回答？

2017年4月8日 下午 04:07
• 謝謝您的指教，我會再更精進我的問法。
2017年4月8日 下午 06:32
• 回樓主:

你的問法沒有問題，至於心冷大的 "不精確的問法......"，是他的簽名檔，每個回答都會出現的 (有看到一條線嗎?)；並不是針對你的問題內容。

在現實生活中，你和誰在一起的確很重要，甚至能改變你的成長軌跡，決定你的人生成敗。 和什麼樣的人在一起，就會有什麼樣的人生。 和勤奮的人在一起，你不會懶惰； 和積極的人在一起，你不會消沈； 與智者同行，你會不同凡響； 與高人為伍，你能登上巔峰。

2017年4月8日 下午 08:19
• 本來簽名檔是小字，還算好分

論壇改版後，就一直是讓人容易混淆，到論壇建議區提過，也一直是這樣。

不精確的問法，就會得到隨便猜的答案；自己都不肯花時間好好描述問題，又何必期望網友會認真回答？

2017年4月9日 上午 05:10
• 原來~我現在才發現!!!!! 謝謝你們:D
2017年10月23日 上午 05:39