两个for循环被写成while循环,用于为对称矩阵赋值

本文关键字:循环 对称 赋值 用于 while for 两个 | 更新日期: 2023-09-27 18:22:24

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

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++;
   }
}

逻辑正确吗,如何改进这个代码?

两个for循环被写成while循环,用于为对称矩阵赋值

我个人认为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循环,但如果这是一个问题,则应该很容易改进。

首先看看我关于如何用1D数组表示对称矩阵的答案:

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);

假定只需要输入CCD_ 1值。