[英]“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.