0

我的目标是制作一个三重for循环来乘以矩阵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,我将矩阵 5.total 中的转换 int 放入其中。乘法 6._total 将结果矩阵的总 int 转换为总字符串

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

4

5 回答 5

5

k循环中,您正在递增i.

于 2012-06-07T17:49:13.277 回答
3

for (int k = 1; k < nodeList.Count+1; i++) <-- 你在增加 i,它应该增加 k。

像这样:

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

于 2012-06-07T17:49:05.783 回答
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++?
于 2012-06-07T17:48:01.703 回答
1

将 for 循环与数组一起使用的标准方法是使用

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

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

于 2012-06-07T17:48:43.180 回答
0

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

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

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

矩阵索引从 0 开始。

于 2012-06-07T17:59:13.300 回答