我意識到使用隨機不會產生真正的隨機數,但我不明白爲什麼這個代碼不應該阻止重複。我們的目標是從之間(不包括)0和44獲得8個唯一的號碼有沒有運行代碼的任何錯誤,但確實會發生重複:對非重複隨機數使用遞歸循環和整數數組
//Loop Begins Within Main
for (int i = 0; i < 8; i++)
{
//Begins Recursion
int x = Unique8(rndm, num8);
num8[i] = x;
}
//Recursion Takes Place Outside of the Main with Static Declarations
static Random rndm = new Random();
static int[] num8 = new int[8];
static int Unique8 (Random rndm, int[] num8)
{
int x = rndm.Next(1, 43);
//Seeks if Number is Repeated
if (num8.Contains(x))
{
//If So, Recursion Takes Place
Unique8(rndm, num8);
}
//Returns Value to Original Loop to be Assigned to Array
return x;
}
如果隨機是由於再生的數算法,爲什麼他們通過遞歸?爲什麼這不會成爲一個無限循環?
我已經找到了一個很好的解決方案,類似於洗牌的甲板和從頂部的繪圖卡。創建原始的排序數組很容易,但我不明白它是如何「洗牌」的。你怎麼亂用C#
的[生成N個隨機和唯一編號的範圍內] BTW – 2012-03-19 13:19:40
可能重複(http://stackoverflow.com/questions/4299138 /在一個範圍內產生n個隨機數和唯一數) – 2012-03-19 13:20:02
這是一個不好的方法,因爲它是無界的。無法保證它永遠不會終止。 – 2012-03-19 13:39:23