【问题标题】:C# & VS error: "make sure that the maximum index on a list is less than the list size"C# & VS 错误:“确保列表上的最大索引小于列表大小”
【发布时间】:2013-10-23 20:26:42
【问题描述】:

我在做作业时遇到了标题中提到的错误,但根本找不到删除它的方法。这是我遇到此问题的方法:

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] 时,在某些时候这个索引可能会变得超过数组的长度。我只是想不出任何方法来解决这个问题,因为我只是编程的初学者。

【问题讨论】:

  • -snip- 根据答案更改for 循环。
  • 提示:通过某种方式改变“i
  • 你试过i &lt; luvut.Length-1
  • @JeroenVannevel - 我会切换这两个子句,否则您仍然可能会收到错误(由于短路评估)。
  • @Tim:当然,好电话。

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


【解决方案1】:

是的,这就是问题所在:

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 子句的主体中。

【讨论】:

  • 像往常一样击败我...... :)
【解决方案2】:

提前结束循环:

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

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

【讨论】:

    【解决方案3】:

    i = luvut.Length -1 时,luvut[i + 1] 超出数组范围会报错。

    您需要:

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

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

    【讨论】:

      【解决方案4】:

      请注意,当您定义一个数组时,项目范围在 0 到 array.length-1 之间。所以你应该写:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 2013-05-27
        • 2011-11-20
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多