首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个for循环,编写为while循环,用于为对称矩阵赋值

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

Stack Overflow用户
提问于 2012-02-05 03:29:14
回答 2查看 412关注 0票数 0

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

代码语言:javascript
复制
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循环,该如何做呢?

我在做类似这样的事情:

代码语言:javascript
复制
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++;
   }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-05 03:36:23

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

代码语言:javascript
复制
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循环,但如果这是一个问题,应该很容易改进。

票数 3
EN

Stack Overflow用户

发布于 2012-02-05 04:09:05

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

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

所以你可以像这样赋值

代码语言:javascript
复制
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)值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9143814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档