C#& VS错误:“确保列表中的最大索引小于列表大小”

时间:2013-10-15 21:18:51

标签: c# arrays visual-studio for-loop

我在做作业时面对标题中提到的错误,根本无法找到删除它的方法。以下是我遇到此问题的方法:

public static double LaskeMiidi(double[] luvut)
{
    double ka = Keskiarvo(luvut);
    double miidi = luvut[0];

    for (int i = 0; i < luvut.Length; i++)
    {
        if (luvut[i] - ka < luvut[i + 1] - ka) // The line error points to!
        {
            miidi = luvut[i];
        }
        else
        {
            miidi = luvut[i + 1];
        }
    }
    return miidi;
}

所以基本上问题是,当我说luvut[i + 1]时,在某些时候这个索引可能会超过数组的长度。我只是无法找出解决这个问题的方法,因为我只是一个编程初学者。

4 个答案:

答案 0 :(得分:2)

是的,这就是问题所在:

for (int i = 0; i < luvut.Length; i++)
{
    if (luvut[i] - ka < luvut[i + 1] - ka)

iluvut.Length - 1时,i + 1将为luvut.Length - 因此索引无效。 (对于长度为x的数组,有效索引为0x - 1,包括在内。)您可能希望更早地结束一次迭代:

for (int i = 0; i < luvut.Length - 1; i++)

那样i + 1仍然是数组中的有效索引 - 在if条件和else子句的主体中。

答案 1 :(得分:0)

提前结束你的循环:

for (int i = 0; i < luvut.Length - 1; i++)

这会阻止循环到达索引无效的位置。

答案 2 :(得分:0)

请注意,在定义数组时,项目范围介于0和array.length-1之间。所以你应该写:

for (int i = 0; i < luvut.Length-1; i++)

答案 3 :(得分:0)

i = luvut.Length -1时,luvut[i + 1]会发出错误,因为它超出了数组范围。

您需要:

for (int i = 0; i < luvut.Length - 1; i++)

或者在另一个If块中以另一种方式处理luvut[i + 1]问题。