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

C#搜索交错数组并统计符合指定范围的decimal元素数量问题

问题排查与修复

核心错误原因

你原本设想的if (arrayToSearch[i] >= ranges[j][0] && arrayToSearch[i] <= ranges[j][1])判断逻辑本身是正确的,代码异常和逻辑错误来自两个问题:

  • 多余的第三层循环触发索引越界:你已经明确每个范围子数组固定存储2个decimal,分别是区间下界(索引0)和上界(索引1),但额外嵌套了for (int n = 0; n < ranges[j].Length; n++)循环,当n=1时访问ranges[j][n + 1]等价于访问索引2,超出了长度为2的数组的索引范围,直接触发IndexOutOfRangeException异常。
  • 存在重复计数风险:如果一个元素同时落在多个重叠范围内,原有逻辑会多次统计该元素,若需求是「元素只要落在任意一个范围就算1次」,需要在匹配到对应范围后提前跳出循环避免重复计数。

修复后的代码

public static int GetDecimalsCount(decimal[] arrayToSearch, decimal[][] ranges)
{
    if (arrayToSearch is null)
    {
        throw new ArgumentNullException(nameof(arrayToSearch));
    }
    if (ranges is null)
    {
        throw new ArgumentNullException(nameof(ranges));
    }

    int sum = 0;
    foreach (decimal num in arrayToSearch)
    {
        bool isInRange = false;
        foreach (decimal[] range in ranges)
        {
            // 追加防御判断,避免非法格式的范围子数组引发异常
            if (range.Length < 2) continue;
            if (num >= range[0] && num <= range[1])
            {
                isInRange = true;
                break; // 匹配到任意范围就跳出,避免重复计数
            }
        }
        if (isInRange) sum++;
    }
    return sum;
}

验证说明

修复后你的两个测试用例可正常通过:

  1. 单范围[0.1, 0.2]测试:匹配0.1、0.2两个元素,返回2,符合预期。
  2. 双范围[0.1,0.2]、[0.4,0.5]测试:匹配0.1、0.2、0.4、0.5四个元素,返回4,符合预期。

内容的提问来源于stack exchange,提问作者Linascts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 08:00:02