首页 > 解决方案 > 我试图用 1 到 20 的乘法表填充 2d 20x20 数组

问题描述

到目前为止,我有,

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

有没有什么地方我犯了重大错误?或者它是一个简单的。

标签: c#arrays

解决方案


数组默认从零开始;所以你的数组是[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();
    }

推荐阅读