C# 如何创建每次返回不同值的随机函数?

C# 如何创建每次返回不同值的随机函数?,c#,random,while-loop,C#,Random,While Loop,我试图编写一个随机函数,返回一个随机数,它与它返回的最后5个不同的数不同 我在excel VBA中使用的非常相似的代码: 函数Rand(ByVal低为长,ByVal高为长)为长 随机化 Num3=Num2 Num2=Num1 兰德=整数((高-低+1)*Rnd)+低 Num1=兰特 当Num1=Num2或Num1=Num3或板材(Csheet)时,不要使用。单元格(Num1,3)>20 兰德=整数((高-低+1)*Rnd)+低 Num1=兰特 环 端函数 数字还需要检查heb[i].Known

我试图编写一个随机函数,返回一个随机数,它与它返回的最后5个不同的数不同

我在excel VBA中使用的非常相似的代码:

函数Rand(ByVal低为长,ByVal高为长)为长
随机化
Num3=Num2
Num2=Num1
兰德=整数((高-低+1)*Rnd)+低
Num1=兰特
当Num1=Num2或Num1=Num3或板材(Csheet)时,不要使用。单元格(Num1,3)>20
兰德=整数((高-低+1)*Rnd)+低
Num1=兰特
环
端函数
数字还需要检查heb[i].Known处的单词是否为false。 我试过这个:

private int Rand(int Min, int Max)
        {
            int i;
            int x = 0;
            Random rnd = new Random();
            oldNum[3] = oldNum[2];
            oldNum[2] = oldNum[1];
            oldNum[1] = oldNum[0];
            do
            {

                i = rnd.Next(Min, Max);
                x++;
            }
            while (Heb[i].Known==false && x<10000 && oldNum.Contains(i));
            oldNum[0] = i;
            return i;

        }

听起来你需要一个
队列

Random rng = new Random();
Queue<int> queue = new Queue<int>();

private int Rand(int min, int max)
{
    int r;

    while(queue.Contains(r = rng.Next(min, max)));

    queue.Enqueue(r);

    if(queue.Count > 5) queue.Dequeue();

    return r;
}
Random rng=new Random();
队列=新队列();
私有整数兰德(整数最小值,整数最大值)
{
INTR;
while(queue.Contains(r=rng.Next(min,max));
排队,排队(r);
如果(queue.Count>5)queue.Dequeue();
返回r;
}

Random()类出了什么问题?它做了什么出乎您意料的事情?嗯,如果每个数字都必须与前五个不同,那么它就不是随机的了!不管怎样,您的示例在每次需要新的随机数时都会给随机化程序添加种子,但效果并不理想。将
rnd
设为静态,并仅调用
Random
函数一次。它每次返回0。什么是
Min
,什么是
Max
,有多大
Heb
,在
Heb
中是否有任何真正的
已知的
值,用什么初始化
oldNum
,等等,或者是一个带有滚动索引的简单固定数组。
Random rng = new Random();
Queue<int> queue = new Queue<int>();

private int Rand(int min, int max)
{
    int r;

    while(queue.Contains(r = rng.Next(min, max)));

    queue.Enqueue(r);

    if(queue.Count > 5) queue.Dequeue();

    return r;
}