IndexOutOfRangeException C#

时间:2012-06-07 17:45:57

标签: c# matrix indexoutofboundsexception

我的目标是使三重for循环乘以矩阵X矩阵,我得到输入矩阵,我必须得到矩阵^ 2.

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

 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

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

5 个答案:

答案 0 :(得分:5)

k循环中,您正在递增i

答案 1 :(得分:3)

for(int k = 1; k&lt; nodeList.Count + 1; i ++)&lt; - 你正在递增i,它应该递增k。

像这样:

for(int k = 1; k&lt; nodeList.Count + 1; k ++)

答案 2 :(得分:2)

数组在C#中基于0 - 第一个元素位于0位而不是位置1。

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

......应该......

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

您还有k循环的复制粘贴错误。

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

答案 3 :(得分:1)

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

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

使用1和+1作为条件将确保您从愤怒中获得索引,因为c#数组被索引为0

答案 4 :(得分:0)

如上所述,你在K循环中以i递增。

每次尝试在循环的最后一次迭代中访问矩阵时,您将获得越界错误。您需要在循环中从0到Count,或者需要在所有矩阵运算中加1。例如:

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

矩阵索引从0开始。