到目前为止,我已经拥有
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
在某些地方我犯了一个重大错误吗?还是简单?
答案 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。