黑马程序员技术交流社区

标题: 循环语句,while与for语句问题 [打印本页]

作者: taolove    时间: 2015-6-3 22:03
标题: 循环语句,while与for语句问题
11)int i=1,sum=0;
while(i<=5)sum+=i;
2)int i,sum=0;
for(i=1;i<=5;i++)
sum+=i;
这两个运行结果为什么不同?
作者: yi95392    时间: 2015-6-4 00:27
你的第一个怎么退出循环??写错了吧
作者: 人生充满期待    时间: 2015-6-4 01:13
你第一个都没有自增语句,i++,程序怎么退出循环呢?这个i++如果放在sum+=i 后面的话 得出的答案是一样的啊,如果放在sum+i前面的话肯定不一样,因为在i赋值给sum的时候已经多加个1了!
作者: 任伟    时间: 2015-6-4 05:50
自己的语言写错了
作者: taolove    时间: 2015-6-4 07:21
任伟 发表于 2015-6-4 05:50
自己的语言写错了

第一个改为while(i++<=5)答案运行结果还是不一样的!
作者: taolove    时间: 2015-6-4 07:23
人生充满期待 发表于 2015-6-4 01:13
你第一个都没有自增语句,i  ,程序怎么退出循环呢?这个i  如果放在sum =i 后面的话 得出的答案是一样的啊 ...

第一个改为while(i++<=5)答案运行结果还是不一样的!
作者: taolove    时间: 2015-6-4 07:25
yi95392 发表于 2015-6-4 00:27
你的第一个怎么退出循环??写错了吧

第一个改为while(i++<=5)答案运行结果还是不一样的!
作者: 洋柿子    时间: 2015-6-4 07:28
本帖最后由 洋柿子 于 2015-6-4 08:10 编辑

while(i++<=5)貌似也不是循环控制条件吧,i++的值一直是1,也应该退不出循环。(错误的理解。。。。。。)
作者: fixer    时间: 2015-6-4 07:35
楼上的大神们好像已经找出问题所在了
作者: taolove    时间: 2015-6-4 07:35
洋柿子 发表于 2015-6-4 07:28
while(i  

这是基础视频里面的,就是这样写的错不了!可以运行!但是自增得到的sum不同!不知道为什么
作者: 洋柿子    时间: 2015-6-4 08:21
taolove 发表于 2015-6-4 07:35
这是基础视频里面的,就是这样写的错不了!可以运行!但是自增得到的sum不同!不知道为什么 ...

循环控制条件i++<=5,进入到循环体sum+=i的i是从2开始的到6结束,2+3+4+5+6=20才对。
作者: 人生充满期待    时间: 2015-6-4 22:50
11)int i=1,sum=0;
while(i<=5)
{
sum+=i;
i++;
}
2)int i,sum=0;
for(i=1;i<=5;i++)
sum+=i;


这2个的值怎么可能不一样 ?你再试一下,如果第一个
int i=1,sum=0;
while(i<=5)
{
i++;

sum+=i;
}
你i++放在前面的话结果肯定不一样,这个最后得出的和 肯定比下面多5个,因为sum在累加的时候,i的值已经+1了
作者: 人生充满期待    时间: 2015-6-4 23:05
本帖最后由 人生充满期待 于 2015-6-4 23:06 编辑
taolove 发表于 2015-6-4 07:21
第一个改为while(i++


你这样写肯定比下面那个多加5,因为你再给sum累加i的值之前i已经先加过1了,而第二个是先把i的值累加给sum,然后i再自增判断条件然后循环
作者: ⒈苆都s.兲憶    时间: 2015-6-4 23:18
你i++都没弄懂,i++这个表达式的值就没变过,只是i的值增加了。
作者: 李竞还活着    时间: 2015-6-5 00:10
循环要有退出调教,很明显你的while循环里少了个i++;所以就成了一个死循环。
作者: 晗修    时间: 2015-6-5 00:35
while(i++<=5)sum+=i; 是从2加到6 for循环是从1加到5 当然不一样 ;
作者: 马贺飞    时间: 2015-6-8 10:20
while死循环
作者: 天下1083    时间: 2015-6-8 11:47
你应该看下while的基本格式,对照下是否一致
作者: 白0702    时间: 2015-6-8 11:58
第一个white循环i值没有改变,是一个死循环,根本退出不了。第二个for循环累加5次,sum的值最后为15.
作者: fanxing    时间: 2015-6-8 17:27
第一个i永远都是<=5啊 死循环啊
作者: tutucoo    时间: 2015-6-8 17:50
while循环没有执行i++操作,所以一直在加,死循环……在while的循环体内加入i++,结果就一样了
作者: luguo    时间: 2015-6-8 18:05
第一个 i 恒等于1
作者: chensc    时间: 2015-6-8 19:19
学习学习!
作者: heyuze    时间: 2015-6-8 19:20
while(i++ <= 5)  { sum+=i; }  最后执行结果为21;
for(i=0;i<=5;i++) { sum +=i } 最后执行结果为15;

原因如下:
1.首先要搞清楚,在这个while循环中,i++是先赋值再运算。也就是说在while(i++ <=5)每一次都是先判断i<=5,再进行自加1。再最后一次的判断时是:
              while( i++ < = 5),此时i=5,但是是先赋值再运算,就是说把当前的5赋值给判断式。执行顺序为5 <=5为真,i再i++,自加1,此时已经进入循环体了,而i此时的值为6.
              在循环体里面又执行了一次 sum += i;(15+=6) ,最后sum=21;
所以进行6次"sum += i", 则为sum与6次i相加,0+1+2+3+4+5+6 = 21;

2.而for循环是先判断,再运算,最后自加。在这个程序里就是先判断"i <= 5",再运算"sum +=i",运算完最后i再自加1.最终循环了5次,也就是sum与5次i相加, 0+1+2+3+4+5 = 15;
作者: 追随自然    时间: 2015-6-8 21:08
好多大神!

作者: chensc    时间: 2015-6-9 18:59
学习学习!
作者: aofex    时间: 2015-6-9 19:58
虽然不懂,但还是要顶一下
作者: 王二小。    时间: 2015-6-9 21:00
你改成while(i<=5)
{
        i++;
       sum+=i;
}
或者把你的while(i++<=5)改成while(++i<=5)试试,因为I++如果不参于表达式的话是直接+1,如果参于表达式的话是先会不自增+1,等表达式完成之后才自身+1,我没有测试,你可以试试.
作者: TOBESKY    时间: 2015-6-9 21:42
第一个是一个死循环吧
作者: Emma    时间: 2015-6-9 22:18
1 你有更新i吗?
作者: 可爱的小炒肉    时间: 2015-6-9 23:20
就看看
作者: 王二小。    时间: 2015-6-10 08:59
可爱的小炒肉 发表于 2015-6-9 23:20
就看看

像妹纸
作者: Dast    时间: 2015-6-14 13:17
论断点调试的重要性!
作者: 沙睿    时间: 2015-6-14 14:38
第一个是个死循环。如果在while中加入i++ 两个程序结果相同
作者: goldboy    时间: 2015-6-14 14:45
第一个sum=sum+i,其中i已经变成2了,不是1,你在while(i++<5)运行后,i的值是不是加1啦
作者: Thomas-王    时间: 2015-6-14 21:47
while循环的一般形式是  while(表达式)语句  ,那个表达式是用来判断的,while(i++<=5)这不是把判断条件改了,结果肯定不行。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2