繁体   English   中英

“索引超出范围异常”错误

[英]“Index was out of range exception” error

我试图在数组中查找第一个缺少的正整数,并且继续收到此错误消息。 我对编程很陌生,我不知道原因。 谁能帮我发现问题? 同样,当输入为[1]时,它也会引发异常。

这是我的代码:

public static int solution(int[] A)
{
    Array.Sort(A);
    List<int> missing = new List<int>();
    List<int> An = new List<int>();

    foreach (var r in A)
    {
        if (r > 0)
        {
            An.Add(r);
        }

    }
    int lengthList = (An[An.Count]) - (An[0]);

    for (int i = An[0]; i <= lengthList - 1; i++)
    {
        if (An[i + 1] != An[i] + 1)
        {
            missing.Add(An[i] + 1);
            An.Insert(i + 1, An[i] + 1);
        }
    }
    if (missing != null)
    {
        return missing[0];
    }
    else
        return 0;
}

您的代码中有几个缺陷。 最重要的是

 int lengthList = (An[An.Count]) - (An[0]);

那应该是什么? 长度An -在项目数An ,你可以遍历-由下式给出An.Count

并且由于列表是0索引的,所以您的索引i应该从0不是An[0] )移到An.Count-1 因此,您的代码应如下所示:

for (int i = 0; i < An.Count; i++) {
    if (An[i + 1] != An[i] + 1) {
       missing.Add(An[i] + 1);
       An.Insert(i + 1, An[i] + 1); // this will break your algorithm
}

i<An.Count避免访问最后一项之后的索引。

请注意,这只能修复此IndexOutOfRangeException 我不知道该算法是否可以完全满足您的要求。 您可以在遍历 An 同时An 插入元素( An.Insert...行)。 对我来说这似乎是错误的。

您遇到一个错误的错误:

for循环中,使用以下退出条件:

i <= lengthList - 1

在列表中,例如,有10个项目将迭代到9。

然后,您可以像这样访问数组:

An[i + 1]

在给定的示例中,您将访问10项数组/列表中不存在的An [10]。

您对循环的正确退出语句是:

i < lengthList - 1

您对lengthList计算似乎也是错误的。 更改为:

int lengthList = An.Count;

您的初始代码

int lengthList = An[An.Count] - An[0];

...还为您提供了ArgumentOutOfRangeException 这也没有道理。 您正在访问列表的内容 ,而不是其长度

边注:

您的初始循环状况

int i = An[0]

...可能也是错误的。 你是这个意思吗

int i = 0

您的问题代码:

1)(An [An.Count])解决了以下问题:An [An.Count-1]

2)int lengthList =(An [An.Count])-(An [0]); 修复以下问题:int lengthList = An.Count;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM