我试图制作一个对数组中的元素求和的程序。但我在MVS上有' System.IndexOutOfRangeException '错误。有人能说出我的错误吗?
public static int Sum(int[,] arr)
{
int total = 0;
for (int i = 0; i <= arr.Length; i++)
{
for (int j = 0; j <= arr.Length; j++)
{
total += arr[i,j];
}
}
return total;
}
static void Main(string[] args)
{
int[,] arr = { { 1, 3 }, { 0, -11 } };
int total = Sum(arr);
Console.WriteLine(total);
Console.ReadKey();
}
答案 0 :(得分:6)
您必须获取每个维度的长度(2D数组的Length
属性是数组中的项目总数),比较应为<
,而不是{{1} }
<=
或者您可以使用for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
total += arr[i,j];
}
}
循环
foreach
甚至Linq
foreach (int item in arr)
{
total += item;
}
答案 1 :(得分:5)
尝试 Linq
int[,] arr = { { 1, 3 }, { 0, -11 } };
int total = arr.OfType<int>().Sum();
Non Linq解决方案:
int total = 0;
foreach (var item in arr)
total += item;
答案 2 :(得分:0)
问题是你的循环正在检查&lt; =并且它们应该是&lt; 由于它们是零索引数组,因此检查&lt; = arr.Length将始终导致索引超出范围异常。