写入文件随机数c#



可能重复:
随机数生成器没有按照我计划的方式工作(C#)

我在c#中有这段代码,但我得到的结果是相同的数字,怎么了?

像a21,a21,a21…

        String c = "";
        int randomNumber = 0;
        for (int i = 0; i < 20; i++)
        {
            randomNumber = RandomNumber(0, 617);
            c += "a " + randomNumber + ", ";                    
        }
        file.WriteLine(c);

I am using this function
public static int RandomNumber(int min, int max)
    {
        Random random = new Random();
        return random.Next(min, max);
    }

您应该将Random作为参数传递给函数。虽然你的功能已经没有附加值了。

var rnd = new Random();
for (int i = 0; i < 20; i++)
{
    randomNumber = RandomNumber(rnd ,0, 617);
    c += "a " + randomNumber + ", ";                    
}
public static int RandomNumber(Random rnd, int min, int max)
{
    return rnd.Next(min, max);
}

每次执行new Random()时,都会使用时钟对其进行初始化。这意味着在一个紧密的循环中,你会多次得到相同的值。您应该保留一个单个Random实例,并在同一实例上继续使用Next。

https://stackoverflow.com/a/768001/284240

编辑:我在你的评论中读到,你想在给定的范围内创建20个唯一的数字,这里有一种使用HashSet<int>:的方法

HashSet<int> uniqueNumber = new HashSet<int>();
var rnd = new Random();
while(uniqueNumber.Count<20){
    var nextNum = rnd.Next(0, 617);
    uniqueNumber.Add(nextNum);
}

Random的实例需要实例化一次。

static Random random = new Random();
public static int RandomNumber(int min, int max)
{        
    return random.Next(min, max);
}

在您的实现中,random在一个时间单位内与系统时钟进行了多次实例化,因此您在极少数迭代中使用了完全相同的种子值,这意味着对于单个调用,您将始终从Next中获得相同的值。

将随机数置于RandomNumber之外,即

static Random random = new Random();
public static int RandomNumber(int min, int max)
{
    return random.Next(min,max);
}

最新更新