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

时间:2016-12-21 09:31:01

标签: c# algorithm

我正在尝试在数组中找到第一个缺失的正整数,并且我继续收到此错误消息。我对编程很新,我无法找出原因。任何人都可以帮我找到问题吗? 此外,当输入为[1]时,它也会抛出异常。

这是我的代码:

pltrdy

3 个答案:

答案 0 :(得分:3)

您的代码中存在一些缺陷。最重要的是

 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。我不知道算法是否符合您的要求。在<{1}} 上迭代时,您插入元素(行An)。这对我来说似乎不对。

答案 1 :(得分:0)

您遇到了一个错误:

for循环中,您使用此退出条件:

i <= lengthList - 1

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

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

An[i + 1]

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

循环的正确退出语句是:

i < lengthList - 1

lengthList的计算似乎也是错误的。将其更改为:

int lengthList = An.Count;

您的初始代码

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

...还为您提供ArgumentOutOfRangeException。这也没有意义。您正在访问列表的内容,而不是 length

<强>旁注:

你的初始循环状况

int i = An[0]

......可能也错了。你是说这个吗?

int i = 0

答案 2 :(得分:0)

您的问题代码:

1)([An.Count])修正:[An.Count-1]

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