我的目标是使三重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
所以我为每个数组和矩阵设置了正确的尺寸,但我总是得到同样的错误。我不明白为什么。可以请某人帮助注意错误,因为我没有看到它。
答案 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开始。