两个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++;
}
}
逻辑正确吗,如何改进这个代码?
我个人认为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值。