正如在此处所做的那样:{{3}},但这次是锯齿状数组。获得:
System.IndexOutOfRangeException。
我是初学者,寻求帮助。这是我的代码:
Project.json
答案 0 :(得分:2)
在你的内循环中这样做:
for (int i = 0; i < arr.Length; i++)
{
if (arr[i] != null)
{
for (int j = 0; j < arr[i].Length; j++)
{
total += arr[i][j];
}
}
}
return total;
因为您的列表甚至不是arr.GetLength(1)
的第一个维度的例外 - 它在该地方没有项目。
在数组看起来像这样的情况下需要if (arr[i] != null)
行:
int[][] arr = new int[][]
{
new int [] {1},
null,
new int [] {1,3,-5},
};
在这种情况下,当我们使用i==1
循环并尝试arr[i].Length
(意为arr[1].Length
时,我们会收到NullReferenceException
。
在完成基础知识并到达Linq之后,所有当前的Sum
方法都可以替换为:
arr.SelectMany(item => item).Sum()
但从基础知识开始是好的:)
答案 1 :(得分:2)
由于您使用的是锯齿状阵列,因此该阵列的尺寸不一定均匀。看看那个锯齿状数组的初始化代码:
int[][] arr = new int[][] {
new int [] {1},
new int [] {1,3,-5},
};
因此,在第一维中,有两个元素({1}
和{1, 3, -5}
)。但第二个维度不是相同的长度。第一个元素只有一个元素({1}
)而第二个元素有3个元素({1, 3, -5}
)。
这就是您面对IndexOutOfRangeException
。
要解决这个问题,您必须将内循环调整为该维度的元素数量。你可以这样做:
for (int i = 0; i < arr.Length; i++) {
for (int j = 0; j < arr[i].Length; j++) {
total += arr[i][j];
}
}