C#实现数组元素奇偶判断时出现索引越界错误如何解决?
错误原因
- 核心问题是对
foreach的用法理解错误:foreach (int i in integerArray)语法中,变量i存储的是数组中的元素值,不是数组的下标索引。如果数组中存在大于等于数组长度的数值,用这个值作为下标访问数组就会触发索引越界错误。举个简单的例子:当你传入的integerArray为[5,1,3]时,foreach第一次循环拿到的i值是5,用5作为下标去访问长度只有3的数组,自然就超出了数组的合法索引范围。 - 次要逻辑问题:你在循环的第一次判断分支就直接return,方法只会处理第一个元素就终止运行,无法完成整个数组的奇偶性判断逻辑。
- 额外注意点:传入的
numAssign数组长度必须和integerArray完全一致,否则即使索引使用正确也可能出现越界问题。
修复方案
你可以根据自己的实际需求选择对应的修复代码:
场景1:遍历所有元素判断奇偶,结果存入numAssign数组
private static string OddOrEven(int[] integerArray, string[] numAssign) { // 先做参数合法性校验,提前拦截非法输入 if (integerArray == null || numAssign == null || integerArray.Length != numAssign.Length) { return "参数不合法"; } // 使用for循环获取数组下标索引 for (int i = 0; i < integerArray.Length; i++) { if (integerArray[i] % 2 == 0) { numAssign[i] = $"{integerArray[i]} is even"; } else { numAssign[i] = $"{integerArray[i]} is odd"; } } // 可根据实际需求调整返回值,比如返回所有结果的拼接字符串 return "所有元素奇偶性判断完成"; }
场景2:仅需要返回第一个元素的奇偶描述
如果你原本的需求就是只判断第一个元素的奇偶性,不需要遍历整个数组,可以直接简化写法:
private static string OddOrEven(int[] integerArray) { if (integerArray == null || integerArray.Length == 0) { return ""; } int firstNum = integerArray[0]; return firstNum % 2 == 0 ? $"{firstNum} is even" : $"{firstNum} is odd"; }
补充说明
如果你不需要用到索引,只想遍历所有数组元素做判断,可以直接用foreach取元素值操作,不需要通过索引访问数组:
foreach (int num in integerArray) { string desc = num % 2 == 0 ? "even" : "odd"; Console.WriteLine($"{num} is {desc}"); }
内容的提问来源于stack exchange,提问作者Kyleigh Fish
相关产品推荐
相关产品推荐

