对非重复随机数使用递归循环和整数数组

1 c#

我意识到使用random不会生成真正的随机数,但我不明白为什么这段代码不能用来防止重复.目标是从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;
}
Run Code Online (Sandbox Code Playgroud)

如果Random因为算法而重新生成数字,为什么它们会通过递归?为什么这不会成为无限循环?

我已经找到了一个很好的解决方案,类似于一个牌组的洗牌和顶部的抽牌.创建原始的排序数组很简单,但我不明白它是如何"改组"的.你如何扰乱C#中的数组?

C.E*_*uis 9

看到

 //If So, Recursion Takes Place
 Unique8(rndm, num8);
Run Code Online (Sandbox Code Playgroud)

您没有对返回值执行任何操作 - 您应该将其更改为

 x = Unique8(rndm, num8);
Run Code Online (Sandbox Code Playgroud)