0

到目前为止,我有,

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

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

4

2 回答 2

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();
    }
于 2018-10-02T07:25:05.817 回答
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。

于 2018-10-02T05:01:17.303 回答