【问题标题】:Entering Random numbers to a 2D array with no Duplicates将随机数输入到没有重复的二维数组中
【发布时间】:2020-04-01 03:44:48
【问题描述】:

我想在一个 8*8 数组中输入 64 个不同的数字,但我遇到了问题...

int[,] check = new int[8, 8];
        Random rnd = new Random();
        int[,] T = new int[8, 8];
        for (int i = 0; i <=7; i++)
        {
            for (int j = 0; j <=7; j++)
            {
                int num = rnd.Next(1, 64);
                check[i, j] = num;
                while (num != check[i,j])
                {
                    T[i, j] = num;

                }
                Console.Write("{0}\t", T[i, j]);
            }
            Console.Write("\n\n");
        }

【问题讨论】:

  • 所写的代码永远无法完成,因为它只能生成 63 个随机数。你实际上并不想要随机数,你知道你想要 1..64。你想要一个随机的order。谷歌“c# random shuffle”找到正确的方法。
  • 您可以使用HashSet 来检查随机数是否已被使用。如果不插入二维数组并保存。
  • 随机对象提供双精度值。不能存储在 int 中。所以将其转换为整数 int num = Convert.ToInt32(rnd.Next(1, 64)*1000);

标签: c# arrays random


【解决方案1】:

尝试以下将数字 0 到 63 随机分配给数组:

    class Program
    {
        const int ROWS = 8;
        const int COLS = 8;
        static void Main(string[] args)
        {
            Random rnd = new Random();

            int[] values = Enumerable.Range(0, ROWS * COLS)
                .Select(x => new { number = x, rand = rnd.Next()})
                .OrderBy(x => x.rand)
                .Select(x => x.number).ToArray();

            int[,] T = new int[ROWS, COLS];

            int count = 0;
            for(int row = 0; row < ROWS; row++)
            {
                for(int col = 0; col < COLS; col++)
                {
                    T[row, col] = values[count++];
                }
            }

        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2017-06-22
    • 1970-01-01
    • 2017-08-02
    • 2021-06-27
    • 1970-01-01
    相关资源
    最近更新 更多