【发布时间】:2012-05-09 01:18:46
【问题描述】:
我正在尝试编写一个 Random 函数,它返回一个随机数,它不同于它返回的最后 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 处的单词是否为假。 我试过这个:
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];
【问题讨论】:
-
Random() 类有什么问题?
-
它做了什么你没想到的?
-
Ehm,如果每个数字都必须与前面的五个不同,那就不是应该的随机了!无论如何,每次您需要一个新的随机数时,您的示例都会为随机发生器播种,但效果不佳。将
rnd设为静态并仅调用Random函数一次。 -
每次都返回0。
-
Min是什么,Max是什么,Heb有多大,Heb中有没有真正的Known值,你用什么初始化oldNum等等.
标签: c# random while-loop