我在c#中使用丢弃策略制作了一个小型随机数生成器程序。问题是它只返回一个相同数字的序列,但它们必须是随机的。可能是什么问题?
public int[] GenerateRandomwithdiscarding(int n, int min, int max)
{
int j = 0;
int[] sequence = new int[n];
for (j=0;j<n;j++)
{
int count = 0;
while(count<j)
{
int r = GenerateNextRandomNumber();
r = min + r % (max + 1 - min);
sequence[j] = r;
count++;
}
}
return sequence;
}
并且已经创建了函数GenerateNextRandomNumber并且没有问题
我的GenerateRandomNumber()
看起来像这样(?)
public int GenerateNextRandomNumber()
{
int j = 24;
int k = 55;
int m = (int)Math.Pow(2, 32);
long seed = DateTime.Now.Millisecond;
long randomNumber = (j * seed + k) % m;
seed = randomNumber;
int finalRandom = (int)randomNumber;
return Math.Abs(finalRandom);
}
答案 0 :(得分:1)
框架随机类应该适用于大多数应用程序。我相信它使用系统时钟作为种子。我使用了一个列表而不是一个数组,因此序列的大小可以根据需要增大或缩小。
using System.Collections.Generic;
using System.Diagnostics;
Random rnd = new Random();
private void GetRandoms(int lowNumber, int highNumber, int numberOfItems)
{
List<int> sequence = new List<int>();
for (int i = 0; i < numberOfItems; i++)
{
sequence.Add(rnd.Next(lowNumber, highNumber + 1));
}
foreach (int i in sequence)
{
Debug.Print(i.ToString());
}
}
像这样调用这个方法......
GetRandoms(4, 55, 10);
答案 1 :(得分:-2)
如果您在方法GenerateNextRandomNumber()中使用Random()类。种子是必须产生新的randoms。 你可以添加一个静态变量,例如
public static int seed = 0;
和随机构造函数
Random rand = new Random(seed++);