我正在尝试编写一个返回随机数的随机函数,该函数与它返回的最后5个不同的数字不同。
我在excel VBA中使用的非常类似的代码:
Function Rand(ByVal Low As Long, ByVal High As Long) As Long
Randomize
Num3 = Num2
Num2 = Num1
Rand = Int((High - Low + 1) * Rnd) + Low
Num1 = Rand
Do While Num1 = Num2 Or Num1 = Num3 Or Sheets(Csheet).Cells(Num1, 3) > 20
Rand = Int((High - Low + 1) * Rnd) + Low
Num1 = Rand
Loop
End Function
该号码还需要检查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;
}
尽管如此,它似乎并没有太好合作......它每次都会返回0。
Min和Max是随机化列表中的范围(应该在1到30之间) Heb是列表中的项目数(约500 - 1000项) 我使用:
初始化oldNum int[] oldNum = new int[3];
答案 0 :(得分:1)
听起来你需要Queue
!
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;
}