0

我知道逻辑二进入对称矩阵数组的值

int k=0;
for (int i = 0; i < size; i++){
     for (int j = 0; j <= i; j++){                
          Q[i, j] = Q[j, i]= arr[k++];
     }
}

但是如果我只能使用一个while循环怎么办?

我正在做类似的事情:

int i=0;
int j=0;
while (reader.Read())
{
   Q[i, j] = Q[j, i]=reader.GetDouble(1);
   if (j < i){
      j++;
   }else{
      j = 0;
      i++;
   }
}

逻辑是否正确,如何改进此代码?

4

2 回答 2

3

我个人认为 while 循环看起来没有嵌套的 for 循环那么干净。我认为只需添加一个像这样的额外条件就可以了:

int k=0;
for (int i = 0; i < size; i++){
     for (int j = 0; j <= i && reader.Read(); j++){                
          Q[i, j] = Q[j, i]= reader.GetDouble(1);
     }
}

如果 reader 在您的矩阵已满之前返回 false ,它将花费一些周期通过 i 循环,但如果这是一个问题,它应该很容易改进。

于 2012-02-04T19:36:22.597 回答
1

首先看看我关于如何在这里用一维数组表示对称矩阵的答案:

https://stackoverflow.com/a/9040526/380384

所以你可以像这样分配值

int k = 0;
while (reader.Read())
{
   A[k++] = reader.GetDouble(1);
}
int size = (int)(Math.Sqrt(2*k+0.25)-0.5);

鉴于只size*(size+1)需要输入值。

于 2012-02-04T20:09:05.290 回答