C# 连续几次给出相同数字的随机数生成

C# 连续几次给出相同数字的随机数生成,c#,random,C#,Random,我想多次创建随机数。 在下面的代码片段中,我尝试从同一个随机变量生成100个介于0和5之间的数字。 尽管如此,我还是连续得到了相同的数字。 我只是希望我的下一个数字应该与上一个不同 Random random = new Random(); for(int i=0;i<100;i++) { int num = random.Next(5); Cons

我想多次创建随机数。 在下面的代码片段中,我尝试从同一个随机变量生成100个介于0和5之间的数字。 尽管如此,我还是连续得到了相同的数字。 我只是希望我的下一个数字应该与上一个不同

            Random random = new Random();

            for(int i=0;i<100;i++)
            {
                int num   = random.Next(5);
                Console.WriteLine(num);
            }
Random Random=new Random();

对于(int i=0;i在一个真正随机的序列中,你会自然地得到重复。如果你想人为地抑制重复,请尝试以下方法:

        Random random = new Random();
        int last = -1;
        for(int i=0;i<100;i++)
        {
            int num;
            do {
              num = random.Next(5);
            } while(num == last)
            last = num;
            Console.WriteLine(num);
        }
Random Random=new Random();
int last=-1;

对于(int i=0;i您需要跟踪上一个数字,并将其与当前数字进行比较:

int? lastNum = null; // variable for tracking the last generated number
// I've chosen a nullable int since it will cover any random number range
for(int i=0;i<100;i++)
{
    int num = 0;
    do
    {
        num  = random.Next(5);
    }
    while (lastNum.HasValue && num == lastNum.Value); // if the lastNum was set and is the same value, loop and generate a new number
    lastNum = num; // store the last value for the next iteration.

    Console.WriteLine(num);
}
int?lastNum=null;//用于跟踪上次生成的数字的变量
//我选择了一个可为null的int,因为它将覆盖任意随机数范围

对于(int i=0;i)可能是这样的:不清楚你在问什么。你(a)是在寻找一种不重复产生随机数的方法,还是(b)担心重复的存在意味着你的方法不会产生真正的随机序列吗?@Jarmo据我所知,OP根本不想要像4444这样的序列。我想404142等是可以接受的。去玩一个像垄断这样的棋盘游戏。拿出一个六面骰子。掷100次。你对重复感到惊讶吗?di您正在使用的e只有5个side,我实际上希望在类似于:`parallel.for(0100,()=>{//code to generate next random}的parallel for循环中这样做“我怎么能做到呢?我不得不问,到底为什么?平行意味着在数字生成之前,你不能有意义地谈论连续的数字。当然,你可以在事实发生后挑出重复的内容并填入结果的空格,但你为什么如此热衷于避免重复?实际上,我正在尝试发送d。”在azure data lake服务中,ata从多个文件并行传输到单个文件,我必须通过缓冲区来实现这一点,但有一个限制,即我最多只能使用5个缓冲区。现在我无法增加变量或保留计数器,因为这是并行的,所以考虑生成一些随机数btw 0到5,并将其用作缓冲区,但不可能正确的解决方案。你应该问这个问题,而不是你问的问题,因为随机数不是答案。我实际上想在并行for循环中这样做:`parallel.for(0100,()=>{//code to generate next random})`。我该怎么做呢?那没什么意义。为什么你需要一个并行循环来生成100个数字?实际上,我正试图在azure data lake服务中将多个文件中的数据并行发送到单个文件,我必须通过缓冲区来实现这一点,但有一个限制,我最多只能使用5个缓冲区。现在我无法增加删除变量或保留计数器,因为这是prallell,所以考虑生成一些随机数btw 0到5,并将其用作缓冲计数器,正如我键入的:假设您可以运行6个并行循环。忘记
random
目前不是线程安全的,让我们假设它是。您有6个并行循环生成随机数,并且您希望确保之前生成的数字与刚才生成的数字不同。这意味着您必须同步6个循环,以便知道循环发生的顺序,并检查没有重复的循环。因此,您失去了并行操作的任何好处。无论如何,我觉得您正在移动目标这是一个非常重要的问题。我建议你为这个问题选择一个答案,然后就你的实际问题开始一个新的答案。尽管我认为最好的解决方案是循环法。