【问题标题】:IndexOutOfRangeException C#IndexOutOfRangeException C#
【发布时间】:2012-06-11 19:36:13
【问题描述】:

我的目标是做一个三元循环来乘以矩阵 X 矩阵,我输入矩阵,我必须得到矩阵^2。

当我调试以下代码时,我收到错误“IndexOutOfRangeException” - 索引超出了数组的范围:

 for (int i = 1; i < nodeList.Count+1; i++)
            {
                for (int j = 1; j < nodeList.Count+1; j++)
                {
                    result[i, j] = "0";

                    for (int k = 1; k < nodeList.Count+1; i++)
                    {

                        if ((matrix[i, k] != null) && (matrix[k, j] != null))
                        {
                            n1 = Convert.ToInt32(matrix[i, k]);
                            n2 = Convert.ToInt32(matrix[k, j]);
                            n3 = Convert.ToInt32(result[i, j]);

                            total = n3 + n1 * n2;
                            _total = total.ToString();

                            result[i, j] = _total;

                        }
                    }
                }
            }

变量在哪里: 1. String[,] 类型的矩阵,维数为 (nodelist+1,nodelist+1) 2.result 是矩阵的相同类型和维度,我想把结果矩阵放在哪里 3.nodelist 是我在图中的节点名称的数组 4. n1,n2,n3 是 int,我将矩阵中的 convert int 放入其中 5.total是乘法运算的结果 6._total 将结果矩阵的总 int 转换为总字符串

所以我为每个数组和矩阵设置了正确的维度,但我总是遇到同样的错误。我不明白为什么。可以请人帮忙注意错误,因为我没有看到它。

【问题讨论】:

  • 在此处发布之前,我确定您在调试器中运行了此程序,并逐步执行,直到出现异常,并检查了您的变量。正确的?真的吗?

标签: c# matrix indexoutofboundsexception


【解决方案1】:

k 循环中,您正在递增i

【讨论】:

  • 我花了整个下午在这上面!!!我无法得到错误,天哪!我可以相信!非常感谢,我需要一双新鲜的眼睛:D 谢谢=****
  • 如果您使用调试器并单步执行您的代码,您会立即找到答案。调试器的使用不是可选的。
  • @abelenky 是的,我有,但我没有注意到为什么 k 没有增加而是停止了。
  • 我在您的原始帖子中没有看到任何内容表明“我在调试器中观看了它,而 k 在我认为应该增加的时候并没有增加”。
【解决方案2】:

for (int k = 1; k

像这样:

for (int k = 1; k

【讨论】:

    【解决方案3】:

    C# 中的数组是从 0 开始的——第一个元素位于位置 0 而不是位置 1。

    for (int i = 1; i < nodeList.Count+1; i++)
    

    ...应该是...

    for (int i = 0; i < nodeList.Count; i++)
    

    您还遇到了 k-loop 的复制粘贴错误。

    for (int k = 1; k < nodeList.Count+1; i++)  // should be k++?
    

    【讨论】:

      【解决方案4】:

      对数组使用 for 循环的标准方法是使用

      for(int x= 0; x &lt; arry.count ;x++)

      使用 1 和 +1 作为条件将确保您得到一个不受欢迎的索引,因为 c# 数组是由 0 索引的

      【讨论】:

        【解决方案5】:

        如前所述,您在 K 循环中按 i 递增。

        此外,每次尝试在循环的最后一次迭代中访问矩阵时,都会出现越界错误。您需要在循环中从 0 变为 Count,或者您需要在所有矩阵运算中添加 -1。例如:

        results[i-1, j-1] = _total;
        

        矩阵索引从 0 开始。

        【讨论】:

          猜你喜欢
          • 2012-01-15
          • 1970-01-01
          • 2021-05-10
          • 2017-08-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多