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#中的数组?
看到
//If So, Recursion Takes Place
Unique8(rndm, num8);
Run Code Online (Sandbox Code Playgroud)
您没有对返回值执行任何操作 - 您应该将其更改为
x = Unique8(rndm, num8);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1427 次 |
| 最近记录: |