具有丢弃策略的随机数发生器

时间:2018-05-26 23:09:42

标签: c# random

我在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); 
}

2 个答案:

答案 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++);