【问题标题】:How to generate five sets of random numbers如何生成五组随机数
【发布时间】:2019-07-19 00:49:13
【问题描述】:

我正在尝试按 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

预期的输出应该是这样的::

  1. 11,9,7,6,4
  2. 13,8,7,6,4
  3. 13,9,7,6,2
  4. 17.9,7,6,1
  5. 1,6,7,4,14

【问题讨论】:

  • 一旦你有你的号码,你应该自己订购(例如Array.Sort(...)
  • 看看你是怎么做for循环的?做另一个一个环绕你现有代码的。如果它运行 5 次,你应该很高兴。还要确保 int[] randNumber = new int[5]; Random rand = new Random();before 两个循环。也可以使用 Sort,就像建议的 @dcg 一样。
  • 您需要另一个循环来执行该代码 5 次,因为您现在只生成 5 个数字
  • 为什么第 5 组没有排序?是故意的吗?

标签: c# random


【解决方案1】:

另一个...

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

【讨论】:

  • 它按预期工作,非常感谢“Idle_Mind”,你真的拯救了我的一天,上帝保佑你
  • @TauheedAlam 你明白为什么这段代码会给你想要的结果而你的没有吗?
【解决方案2】:

刚刚增强了您的代码。

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

【讨论】:

    【解决方案3】:

    这是一种方法:

    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
                )
            )
        )
    );
    

    结果(嗯,一个可能的结果,无论如何):

    17,17,10,2,1
    19,10,10,8,2
    17,16,9,3,3
    17,16,8,5,1
    18,14,13,10,3
    

    【讨论】:

    • "尝试生成五套" 这么好的Range...Select...功夫,你还需要一个电话吗?
    • 也许你应该为 linq 的东西添加一些解释,因为看起来 OP 可能还不是 C# 专业人士(没有冒犯)。
    • @MongZhu 不,第二个数字是计数,不是最大值,所以它会从1开始枚举5个数字。见the docs
    • @MongZhu 也许我的措辞不正确。我不是说你需要一个循环。但是当前的代码必须重复五次,不管你是使用循环还是再次使用Enumerable.Range。我们现在应该停止讨论;)
    • @MongZhu 我已经添加了另一个Range...Select 重复五次。
    猜你喜欢
    • 2011-12-10
    • 1970-01-01
    • 2021-05-15
    • 2011-02-01
    • 2011-02-19
    • 2011-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多