最佳解答者
程式自動執行時,亂數生成的樹會產生多組重複值才變換,手動除錯卻沒問題

問題
-
各位前輩們
以下是我程式問題
我使用方法與陣列去亂數隨機生成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
解答
-
線上手冊就有寫原因。
https://msdn.microsoft.com/zh-tw/library/h343ddh9.aspx
註解
預設種子值衍生自系統時鐘,而且具有有限的解析度。 如此一來,不同 Random 連續呼叫預設建構函式所建立的物件都有相同的預設種子值,因此,將會產生隨機數字的同一組。 即可避免這個問題,請使用單一 Random 物件產生所有的隨機數字。 您也可以解決它藉由修改系統時鐘所傳回的種子值,並明確地提供這個新的初始值來 Random(Int32) 建構函式。不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?
- 已提議為解答 Bill ChungMVP, Moderator 2017年4月8日 下午 05:25
- 已標示為解答 Bill ChungMVP, Moderator 2017年10月23日 上午 06:57
所有回覆
-
線上手冊就有寫原因。
https://msdn.microsoft.com/zh-tw/library/h343ddh9.aspx
註解
預設種子值衍生自系統時鐘,而且具有有限的解析度。 如此一來,不同 Random 連續呼叫預設建構函式所建立的物件都有相同的預設種子值,因此,將會產生隨機數字的同一組。 即可避免這個問題,請使用單一 Random 物件產生所有的隨機數字。 您也可以解決它藉由修改系統時鐘所傳回的種子值,並明確地提供這個新的初始值來 Random(Int32) 建構函式。不精確的問法,就會得到隨便猜的答案;自己都不肯花時間好好描述問題,又何必期望網友會認真回答?
- 已提議為解答 Bill ChungMVP, Moderator 2017年4月8日 下午 05:25
- 已標示為解答 Bill ChungMVP, Moderator 2017年10月23日 上午 06:57