2D矩阵索引超出范围

时间:2018-08-21 16:25:03

标签: c# arrays matrix 2d

我正在尝试创建一个二维矩阵,该矩阵将在表格中显示和排序。

我在用数字填充矩阵/数组时遇到问题。我不想在那里重复,因此创建了一个临时List

我尝试了多种方法来解决将索引num添加到列表时出现的索引超出范围的异常,但是我不知道会发生什么。

我最初将所有变量都设置为static,而该方法不需要。然后,我尝试将它们放入方法中,以查看如果变量不是static会发生什么情况。

我将如何解决此错误? (全部在控制台应用程序中完成)

    static int max;

    static int max_row;

    static int max_col;

    //static int[,] matrixArray = new int[max_row, max_col];

    //static List<int> list = new List<int>();

    //Filling the matrix
    public static void matrixFill(int[,] matrixArray, List<int> list)
    {
        for (int x = 0; x < max_row; x++)
        {
            for (int y = 0; y < max_col; y++)
            {
                Random rand = new Random();

                int num = rand.Next(10, 100);

                if (!list.Contains(num))
                {
                    matrixArray[x, y] = num;

                    //Index error occurs here
                    list.Add(num);
                }
                else
                {
                    y--;
                }
            }
        }
    }

        //What is happening in the main method until the error
        int[,] matrixArray = new int[max_row, max_col];

        List<int> list = new List<int>();

        Console.Write("Please enter matrix size: ");

        Int32.TryParse(Console.ReadLine(), out max);

        max_row = max;
        max_col = max;

        Console.WriteLine();

        matrixFill(matrixArray, list);

1 个答案:

答案 0 :(得分:0)

问题是您需要在设置max_row和max_col参数之前定义matrixArray的大小。

    List<int> list = new List<int>();

    Console.Write("Please enter matrix size: ");

    Int32.TryParse(Console.ReadLine(), out max);

    max_row = max;
    max_col = max;
    int[,] matrixArray = new int[max_row, max_col]; // move this here

相反,如上所述,将定义移动到要求用户提供最大大小之后,以使您创建的矩阵与期望的大小相同。