0

My goal is to make a triple for loop to multiply matrix X matrix, i get in input the matrix and i have to get matrix^2.

I get the error "IndexOutOfRangeException" - index was outside the bounds of the array when i debug the following code:

 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;

                        }
                    }
                }
            }

where the variables are: 1. matrix that is type String[,] and the dimensions are (nodelist+1,nodelist+1) 2.result that is is the same type and dimension of the matrix, where i want to put the resultant matrix 3.nodelist is the array of the names of the nodes that i have in the diagram 4. n1,n2,n3 are int, I put in them the convert int from the matrix 5.total is the result of the operation for the multiplication 6._total convert total int in total string for the result matrix

So i set the right dimensions for every array and matrix but i get constantly the same error. I don't get it why. Can please someone help to notice the error, because i don't see it.

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 ベースです。最初の要素は、位置 1 ではなく位置 0 にあります。

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 に答える