C# 如何生成五组随机数

C# 如何生成五组随机数,c#,random,C#,Random,我试图生成五组c顺序的随机数,用最高的数字和逗号分隔 我试着用 public static void Main(string[] args) { int[] randNumber = new int[5]; Random rand = new Random(); Console.Write("The random numbers are: "); for (int h = 0; h < randNumber.Length; h++) {

我试图生成五组c顺序的随机数,用最高的数字和逗号分隔

我试着用

public static void Main(string[] args)
{
    int[] randNumber = new int[5];
    Random rand = new Random();
    Console.Write("The random numbers are: "); 
    for (int h = 0; h < randNumber.Length; h++)
    {
        randNumber[h] = rand.Next(1, 20);           
    } 
    Console.Write(string.Join(", ", randNumber));        
}
我只得到一组输出,没有从最高到最低排序,即

随机数是:12,2,12,19,11

预期输出应如下所示:

11,9,7,6,4 13,8,7,6,4 13,9,7,6,2 17.9,7,6,1 1,6,7,4,14
这里有一种方法:

var rnd = new Random();

Console.WriteLine(
    string.Join("\n",
        Enumerable
            .Range(1, 5) // returns an IEnumerable<int> containing 1,2,3,4,5.
            .Select(s =>   // for each int in the IEnumerable
                string.Join(",",
                Enumerable
                    .Range(1, 5)
                    .Select(i => rnd.Next(1, 20)) // get a random number.
                    .OrderByDescending(r => r) // order the inner IEnumerable
            )
        )
    )
);

只是增强了你的代码

class Program
    {
        static void Main(string[] args)
        {
            int[] randNumber = new int[5];
            Random rand = new Random();
            Console.WriteLine("The random numbers are: ");
            for (int i = 0; i < 5; i++)
            {
                for (int h = 0; h < randNumber.Length; h++)
                {
                    randNumber[h] = rand.Next(1, 20);
                }
                randNumber = randNumber.OrderByDescending(x => x).ToArray();
                Console.WriteLine(string.Join(", ", randNumber));
            }
        }
    }
另一个

static void Main(string[] args)
{
    Random R = new Random();
    List<List<int>> sets = new List<List<int>>();
    for(int s=1; s<=5; s++)
    {
        List<int> set = new List<int>();
        for (int i = 1; i <= 5; i++)
        {
            set.Add(R.Next(1, 20));
        }
        set.Sort();
        set.Reverse();
        sets.Add(set);
    }

    for(int i=1; i<=sets.Count; i++)
    {
        Console.WriteLine(i.ToString() + ". " + string.Join(", ", sets[i-1]));
    }

    Console.Write("Press Enter to quit");
    Console.ReadLine();
}

一旦你有了数字,你应该自己排序,例如数组。排序…看看你是如何做for循环的?再做一个围绕现有代码的操作。如果它跑了5次,你就可以走了。还要确保int[]randNumber=new int[5];随机兰德=新的随机;在两个循环之前。也可以像@dcg建议的那样使用排序。您需要另一个循环来执行该代码5次,因为您现在只生成5个数字:为什么第5个集合没有排序?这是故意的吗?试着生成五组,你不需要再打一次这样好的范围吗…选择。。。功夫?也许你应该为linq的东西添加一些解释,因为OP似乎不是C职业,但没有冒犯。@MongZhu不,第二个数字是计数,而不是最大值,所以它将从1开始列举5个数字。看,也许我的措辞不正确。我不是说你需要一个循环。但是当前代码必须重复五次,无论您再次使用循环还是Enumerable.Range。我们现在应该停止这种讨论@MongZhu我添加了另一个范围…选择重复五次。其工作如预期,谢谢你这么多闲心,你真的救了我一天,上帝保佑You@TauheedAlam你明白为什么这段代码会给你想要的结果,为什么你的代码没有?
static void Main(string[] args)
{
    Random R = new Random();
    List<List<int>> sets = new List<List<int>>();
    for(int s=1; s<=5; s++)
    {
        List<int> set = new List<int>();
        for (int i = 1; i <= 5; i++)
        {
            set.Add(R.Next(1, 20));
        }
        set.Sort();
        set.Reverse();
        sets.Add(set);
    }

    for(int i=1; i<=sets.Count; i++)
    {
        Console.WriteLine(i.ToString() + ". " + string.Join(", ", sets[i-1]));
    }

    Console.Write("Press Enter to quit");
    Console.ReadLine();
}
1. 19, 18, 12, 9, 3
2. 18, 17, 15, 5, 3
3. 18, 11, 9, 7, 1
4. 13, 12, 10, 10, 6
5. 12, 6, 5, 5, 3
Press Enter to quit