我试图用1到20的乘法表填充2d 20x20数组

时间:2018-10-02 04:41:02

标签: c# arrays

到目前为止,我已经拥有

int[,] array2d = new int[20, 20];

for (int i = 1; i < array2d.GetLength(0); i++)
{
    for (int j = 1; j < array2d.GetLength(1); j++)
    {
        array2d[i, j] = i * j ;
        Console.WriteLine(array2d[i, j]);
    }
}

但是这跳过了很多数字,我试图通过检查我是否<=来解决它,但是它抛出一个IndexOutOfRangeException

在某些地方我犯了一个重大错误吗?还是简单?

2 个答案:

答案 0 :(得分:2)

数组默认为基于零的;所以你的数组是[0..19, 0..19];但是,您需要一个不同范围[1..20, 1..20]。我们不应该混合它们:(更好的选择)

    int[,] array2d = new int[20, 20];

    // i, j - array indexes
    for (int i = 0; i < array2d.GetLength(0); i++)
    {
        for (int j = 0; j < array2d.GetLength(1); j++)
        {
            // since i, j are array indexes we multiply (i + 1) * (j + 1)
            array2d[i, j] = (i + 1) * (j + 1);

            Console.Write($"{array2d[i, j],3} ");                
        }

        Console.WriteLine();
    }

    int[,] array2d = new int[20, 20];

    // i, j are values to be multiplied 
    for (int i = 1; i <= array2d.GetLength(0); i++)
    {
        for (int j = 1; j <= array2d.GetLength(1); j++)
        {
            // since i, j are values we have to compute array's indexes: i - 1, j - 1 
            array2d[i - 1, j - 1] = i * j;

            Console.Write($"{array2d[i - 1, j - 1],3} ");                
        }

        Console.WriteLine();
    }

答案 1 :(得分:0)

int[,] array2d = new int[20, 20];
    for (int i = 0; i < 20; i++)
    {
        for (int j = 0; j < 20; j++)
        {
            array2d[i, j] = (i+1) * (j+1) ;
            Console.WriteLine(array2d[i, j]);
        }
    }

您的问题是,当您定义new int[20]之类的数组时,它可以从0迭代到19,当您尝试在索引20处访问它的值时,您会收到此异常,因为该数组中不存在索引20。

调用数组.GetLength方法时,它返回其字段计数为20,而不是其最大索引为19。