为何do-while循环多执行一次?1597超出条件仍被打印的原因
关于do-while循环打印1597的原因解析
首先先把你的代码和运行结果清晰列出来:
你的代码
int b=1,a=0,c; System.out.println(a); System.out.println(b); do { c=a+b; System.out.println(c); a=b; b=c; }while(c<=1000 );
运行结果
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
这其实是do-while循环的核心特性导致的,咱们一步步拆解来看:
do-while循环的执行逻辑和while循环有个本质区别:它是先执行一次循环体里的代码,再去判断while后面的条件是否成立。简单说就是「先干活,再检查」,不管条件满不满足,循环体至少会跑一次。
咱们跟着代码的执行流程走最后几步,就能明白为什么1597会被打印:
当循环执行到倒数第二次的时候,变量的值是:a=610,b=987,这时候满足c<=1000的条件,进入下一次循环:
- 执行循环体第一行:
c = a + b = 610 + 987 = 1597 - 然后执行
System.out.println(c)——这时候1597已经被打印出来了 - 接着更新变量:
a = b = 987,b = c = 1597 - 这时候才去判断
while(c<=1000)的条件:1597显然大于1000,条件不成立,循环终止
看到没?问题就出在「先执行循环体,再判断条件」这个顺序上。哪怕这次计算出来的c已经超过了1000,它也已经完成了打印操作,之后才会停止循环。
如果想要避免这种情况,你可以把判断逻辑移到循环体内部,或者改用while循环(先判断再执行),比如:
int b=1,a=0,c; System.out.println(a); System.out.println(b); c = a + b; while(c <= 1000) { System.out.println(c); a = b; b = c; c = a + b; }
这样修改后,就只会打印到987,不会输出1597了。
内容的提问来源于stack exchange,提问作者sctts-lol
相关产品推荐
相关产品推荐

