You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:09:04