You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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的条件,进入下一次循环:

  1. 执行循环体第一行:c = a + b = 610 + 987 = 1597
  2. 然后执行System.out.println(c)——这时候1597已经被打印出来了
  3. 接着更新变量:a = b = 987,b = c = 1597
  4. 这时候才去判断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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:39:35