我試圖在1-10之間生成5個沒有重複值的隨機數字。因此,我創建了一個遞歸方法,該方法應該檢查是否已經爲陣列中的任何位置創建了值。如果有,則會創建一個新的隨機數並再次檢查。如何使用遞歸方法在C#中創建隨機唯一編號?
這裏是我的代碼:
static Random randomObject = new Random();
static void Main(string[] args)
{
long[] randomArr = new long[5];
for (int i = 0; i < randomArr.Length; i++)
{
if (randomArr[i] == randomArr[0])
{
randomArr[i] = randomObject.Next(1, 11);
}
else
{
long check = randomObject.Next(1, 11);
randomArr[i] = CheckIfUnique(check, randomArr);
}
}
Console.WriteLine("\nPress the [enter] key to continue...");
Console.ReadLine();
}
static long CheckIfUnique(long a, long[] b)
{
for (int i = 0; i <= b.GetUpperBound(0); i++)
{
if (a == b[i])
{
a = randomObject.Next(1, 11);
CheckIfUnique(a, b);
}
}
return a;
}
但我仍然得到重複的值。有誰知道我的邏輯中是否有錯誤,或者編譯器會在執行如此多的遞歸步驟後出現錯誤?
在CheckIfUnique中,您不返回CheckIfUnique(a,b),您只需調用它。那是你要的嗎? – ergonaut
你是否在使用遞歸,因爲你*有*(作爲測試的一部分,也許),或者因爲你認爲這是必要的?這真的不是解決這個問題的適當方法。 –
如果你是在1到10之間的值之後,你爲什麼使用long? –