我知道逻辑二进入一个对称矩阵,数组的值
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++;
}
}逻辑是否正确,如何改进这段代码?
发布于 2012-02-05 03:36:23
我个人认为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-05 04:09:05
首先看看我关于如何用一维数组表示对称矩阵的答案:
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)值。
https://stackoverflow.com/questions/9143814
复制相似问题