首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是"System.ArgumentOutOfRangeException:‘索引超出范围。必须是非负数并且小于集合的大小“?

什么是"System.ArgumentOutOfRangeException:‘索引超出范围。必须是非负数并且小于集合的大小“?
EN

Stack Overflow用户
提问于 2020-06-03 16:29:47
回答 1查看 2.3K关注 0票数 0

我想找出用连字符分隔的连续和非连续数字。一旦我运行这个给定的代码,它就会给我一个错误,因为"System.ArgumentOutOfRangeException:‘索引超出了范围。必须是非负数并且小于集合的大小。参数名:索引’“。这段代码有什么问题,如果有人知道的话请解释一下。

代码语言:javascript
运行
复制
    public static void Main(string[] args)
    {
        Console.Write("Enter a few numbers (eg 1-2-3-4): ");

        var input = Console.ReadLine();
        var numArray = new List<int>();

        foreach (var number in input.Split('-'))
        {
            numArray.Add(Convert.ToInt32(number));
        }
        numArray.Sort();

        var isConsecutive = true;
        for (int i = 0; i < numArray.Count; i++)
        {
            if (numArray[i] != numArray[i + 1] - 1)
            {
                isConsecutive = false;
                break;
            }
        }

        if (isConsecutive)
        {
            Console.WriteLine("Consecutive");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Not Consecutive");
            Console.ReadLine();
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2020-06-03 16:31:32

问题是:

代码语言:javascript
运行
复制
numArray[i + 1]

当您的i到达最后一个索引时,在i+1中没有任何项目以超出范围的索引结束。

如果你真的需要i + 1和安全保护,你需要重新考虑逻辑,这样你就不会访问实际上不存在的索引。

你可能想要:

代码语言:javascript
运行
复制
for (int i = 0; i < numArray.Count - 1; i++)

这样它就会在数组的倒数第二项停止。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62168358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档