【问题标题】:Creating a 3x3 Matrix and ordering numbers in a vortex from smaller to bigger创建一个 3x3 矩阵并在漩涡中从小到大排序数字
【发布时间】:2013-10-14 13:50:20
【问题描述】:

我想用输入数字创建一个 3x3 矩阵,然后将数字从小到大排序,然后像漩涡一样将它放在矩阵中:1,2,3,4,5,6,7,8,9并将编号 1 到 0.0 位置,2 到 0.1、3 到 0.2、4 到 1.2、5 到 2.2、6 到 2.1、7 到 2.0、8 到 1.0 和 9 到 1.1。

const int MATRIX_ROWS = 3;
        const int MATRIX_COLUMNS = 3;
        List<int> l = new List<int>(l);

        double[,] matrix = new double[MATRIX_ROWS, MATRIX_COLUMNS];
        for (int i = 0; i < MATRIX_ROWS * MATRIX_COLUMNS; ++i)
        {
            int input;
            Console.Write("Enter value");
            while (!int.TryParse(Console.ReadLine(), out input))
            {
                Console.Write("Enter correct value!");
            }
            l.Add(input);
        }
        l.Sort();
        for (int i = 0; i < MATRIX_ROWS; i++)
        {
            for (int j = 0; j < MATRIX_COLUMNS; j++)
            {
                matrix[i, j] = l[i * 3 + j];
            }

我是这样开始获取输入数字的,我需要第二部分的帮助。

【问题讨论】:

    标签: c# matrix


    【解决方案1】:

    这将为您呈现矩阵的“漩涡状”结果:

                List<int> nums = new List<int>();
                double[,] matrix = new double[3,3];
                for (int i = 0; i < 9; ++i)
                {
                    double input;
                    Console.Write("Enter value");
                    while (!double.TryParse(Console.ReadLine(), out input))
                    {
                        Console.Write("Enter correct value!");
                    }
                    nums.Add(int.Parse(input.ToString()));
                }
                nums.Sort();
                int block = 0;
                int[] order = new int[] { 0, 1, 2, 2, 2, 1, 0, 0, 1 };
                for (int i = 0 ; i < order.Length; i++)
                {
                    switch (block)
                    {
                        case 0:
                            matrix[block, order[i]] = nums[i];
                            if (i == 2)
                                block = 1;
                            break;
                        case 1:
                            if (i < order.Length - 3)
                            {
                                matrix[block, order[i]] = nums[i];
                                block = 2;
                            }
                            else
                                matrix[block, order[i]] = nums[i];
                            break;
                        case 2:
                            if(i == order.Length - 3)
                            {
                                matrix[block, order[i]] = nums[i];
                                block = 1;
                            }
                            else
                                matrix[block, order[i]] = nums[i];
                            break;
    
                    }
                }
    
                Console.WriteLine("The Resulting Matrix is:");
    
                for (int row = 0, col = 0; row < 3; row++)
                {
                    Console.WriteLine("row " + row + ": {0} - {1} - {2}", matrix[row, col], matrix[row, col + 1], matrix[row, col + 2]);
                    col = 0;
                }
    

    编辑:现在它显示结果。

    【讨论】:

    • 我也试过了,但这让我只插入 9 个数字,然后什么都不做。有什么想法吗?
    • 矩阵变量将以“漩涡”的方式填充,如果你在for循环之后放置一个断点,你会看到它被正确填充。
    • 您可能想要显示结果,这就是您所说的“然后什么都不做”。我将编辑以在屏幕上显示结果。
    • @terrybozzio 这正是我的意思。谢谢楼主
    【解决方案2】:

    如我所见-您可以在开头的某处声明List&lt;int&gt; l,通过l.Add(x); 读取整个数据,然后执行l.Sort(),并在数据排序后-填充您的矩阵。如果您还有其他问题,请告诉我。

    所以你会得到类似的东西

    const int MATRIX_ROWS = 3;
    const int MATRIX_COLUMNS = 3;
    List<int> l = new List<int>();
    
    double[,] matrix = new double[MATRIX_ROWS, MATRIX_COLUMNS];
    for (int i = 0; i < MATRIX_ROWS * MATRIX_COLUMNS; ++i)
    {
            double input;
            Console.Write("Enter value");
            while (!double.TryParse(Console.ReadLine(), out input))
            {
                Console.Write("Enter correct value!");
            }
            l.Add(input);
    }
    l.Sort();
    for (int i = 0; i < MATRIX_ROWS; i++)
    {
        for (int j = 0; j < MATRIX_COLUMNS; j++)
        {
            matrix[i, j] = l[i*3 + j];
        }
    }
    

    【讨论】:

    • 能否请您复制并粘贴我的代码并告诉我您将如何使用它,因为我不太使用 c#,而且我还在学习。谢谢
    • 我确实编辑了我必须修改它的方式,但仍然出现 1 个错误: List l = new List(l);使用未分配的局部变量 (l),我该如何解决?
    • 把那个 kine 改成List&lt;int&gt; l = new List&lt;int&gt;();
    • 谢谢先生的帮助。
    • 接受我的回答将不胜感激)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多