C#遍历数组求和时出现IndexOutOfRangeException越界异常
异常触发原因
foreach语法遍历数组时,循环变量直接获取的是数组对应位置的元素值,不是元素的下标索引。- 本次测试用例中数组长度为6,合法索引范围是
0~5,但输入的数组元素包含10、11两个大于5的值。代码中写的sum += arr[j]是把元素值当成索引去访问数组,当遍历到值为10的元素时,尝试访问arr[10],超出数组边界,直接抛出IndexOutOfRangeException索引越界异常。 - 退一步说,就算数组所有元素值都在0~5的索引范围内,这个写法的计算逻辑也是错误的:比如遍历到第一个元素1时,累加的是
arr[1]也就是第二个元素的值2,根本不是当前遍历到的元素,计算结果必然不符合预期。
修复方案
不需要通过索引二次访问数组,foreach 循环中直接累加循环变量拿到的元素值即可。
修复后的完整可运行代码:
public static void Main(string[] args) { int n, sum = 0; n = Convert.ToInt32(Console.ReadLine()); int[] arr = new int[n]; for(int i = 0; i < n; i++) { arr[i] = Convert.ToInt32(Console.ReadLine()); } foreach(int j in arr) { sum += j; } Console.WriteLine(sum); }
如果更习惯用下标索引遍历数组,也可以把foreach部分替换为标准的for循环写法,效果一致:
for(int i = 0; i < arr.Length; i++) { sum += arr[i]; }
运行修复后的代码,输入测试用例的6个数字,即可得到正确求和结果31。
内容的提问来源于stack exchange,提问作者CHARU
相关产品推荐
相关产品推荐

