我意识到使用随机不会产生真正的随机数,但我不明白为什么这个代码不应该阻止重复。我们的目标是从之间(不包括)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