C# 如何创建每次返回不同值的随机函数?
我试图编写一个随机函数,返回一个随机数,它与它返回的最后5个不同的数不同 我在excel VBA中使用的非常相似的代码: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
函数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;
}