do while和while的区别

本文详细解析了do-while与while循环的区别及用法,通过实例对比两种循环的执行流程,帮助读者理解循环控制结构的特点。

一.do-while语句

do-while语句的语法:

do{

  statement

}while(expression);

 

看下面示例:

var i=10;

do{

  i+=2;

}while(i<10)

alert(i)           // 12     (允许你吃了,就给了你两个蛋挞) 

第一眼看10<10不成立呀,alert(i)应该弹出10才对呀,为什么是12呢?因为在对表达式求值之前,都要先执行一遍循环体内的代码(i+2=10+2;i=12),然后才会与出口条件进行判断(i<10=>12<10,),成立就继续循环,不成立就跳出循环,执行结束!

看下面示例

var i=0;

do{

 i+=2;

   alert(i)       // 2,4,6,8,10   只要变量小于10,循环就一直继续下去,直到不满足条件后寄跳出循环。(允许你吃了,连着给了你好几个蛋挞) 

}while(i<10)

 

二.while语句    

while语句的语法: 

while(expression){

  statement

 

看下面示例:

var i=10;

while(i<10){

 i+=2

 alert(i)       // 什么都没有   条件不成立,没有走循坏体 (我就是不给你吃不给你吃,一个蛋挞都不给)    

}

alert(i)           // 10     (好吧,那我啃老去了,这个10,是全局变量i=10)

 

在看下面示例

var i=0;

while(i<10){

 i+=2

 alert(i)        // 2,4,6,8,10   只要变量小于10,循环就一直继续下去,直到不满足条件后寄跳出循环。(看你可怜,允许你吃了吧,连着给了你好几个蛋挞) 

}

 while里面的判断条件成立,然后走循环体,直到不满足条件后,跳出循环,执行结束。

 

do-while && while  

do-while  语句至少执行一次循环体内的代码;

while       条件不成立,语句永远不会执行循环体内的代码;

<think>我们正在讨论的是编程语言中循环结构的区别,具体是`do-while`循环`while`循环的区别。根据用户提供的引用问题,我们需要清晰地解释这两种循环的差异,并给出示例说明。 核心区别: 1. **执行顺序**: - `while`循环:先判断条件,条件为真才执行循环体。 - `do-while`循环:先执行一次循环体,然后再判断条件,条件为真则继续执行。 2. **执行次数**: - `while`循环:如果初始条件就不满足,则循环体一次也不执行。 - `do-while`循环:无论初始条件如何,循环体至少执行一次。 引用中的示例可以说明这一点: - 在引用[1]中,`whileLoop`方法中,初始条件`i<=5`(i=0满足),所以会执行循环体。而`doLoop`方法中,初始条件`i=6`,条件`i<=5`不满足,但是`do-while`循环先执行了一次循环体(打印6),然后判断条件不满足才退出。 - 引用[2]中的C语言示例同样展示了:当初始条件为假(i=0,在C语言中0为假)时,`while`循环不执行,而`do-while`循环执行了一次(打印0)然后才判断条件(条件为假退出)。 - 引用[3]则用了一个JavaScript的例子(虽然用户没有提供具体代码,但描述类似)说明:在条件判断前,循环体已经执行了一次,导致变量值改变。 因此,我们可以总结: ### 1. **执行流程对比** | 循环类型 | 执行顺序 | 最少执行次数 | |----------------|------------------------------|--------------| | `while` | **先判断,后执行** | 0次 | | `do-while` | **先执行,后判断** | 1次 | ### 2. **适用场景** - **`while`循环**:适用于循环次数不确定,且可能一次都不执行的情况(如读取文件直到结束,但文件可能为空)。 - **`do-while`循环**:适用于必须至少执行一次的情况(如用户输入验证,先让用户输入一次再判断)。 ### 3. **代码示例说明** #### Java示例(参考引用[1]) ```java // while循环:先判断条件 int i = 0; while(i <= 5) { System.out.println(i); i++; } // 输出:0 1 2 3 4 5 // do-while循环:先执行一次 int j = 6; do { System.out.println(j); // 先打印6 j++; } while(j <= 5); // 然后判断6<=5为假,退出 // 输出:6 ``` #### C语言示例(参考引用[2]) ```c int i = 0; // while循环:条件为假(i=0是假)不执行 while(i && i!=-10) { printf("%d ",i); // 不会执行 } int j = 0; // do-while循环:先执行一次,再判断(条件为假退出) do { printf("%d ", j); // 输出0 j--; } while(j && j!=-10); // 然后判断(0为假)退出 // 输出:0 ``` ### 4. **关键注意事项** - 在`do-while`循环中,循环体内的语句至少执行一次,即使条件一开始就不满足(如上述Java示例中j=6的情况)。 - 循环条件的位置:`while`循环的条件在循环体之前,`do-while`循环的条件在循环体之后(注意`do-while`循环末尾有一个分号)。 ### 5. **错误防范** - 避免在`do-while`循环中因忘记修改循环变量导致无限循环(`while`循环一样需要注意循环变量的更新)。 - 注意条件表达式的逻辑,确保循环在预期次数后退出。 ### 总结 > 💡 **核心记忆点**: > - `while`:先问“能不能做?”再做 → 可能一次都不做 > - `do-while`:先做一次再问“还要不要做?” → 至少做一次 --- ### ❓ 相关问题 1. **在哪些实际编程场景中必须使用`do-while`循环?** 2. **如何避免`do-while`循环中的条件判断错误导致多执行一次?** 3. **`while``do-while`循环在性能上有差异吗?** 4. **在Python等没有`do-while`语法的语言中,如何实现类似“至少执行一次”的循环逻辑?**[^2]</think>### `do-while` 与 `while` 循环的核心区别 | **特性** | **`while` 循环** | **`do-while` 循环** | |------------------|--------------------------------------|-----------------------------------| | **执行顺序** | 先判断条件,再执行循环体 | 先执行循环体,再判断条件 | | **最少执行次数** | 0次(条件不满足时直接跳过) | **至少1次**(无论条件是否满足) | | **语法结构** | `while(条件){ 循环体 }` | `do{ 循环体 }while(条件);` | | **适用场景** | 需先验证条件再执行的场景 | 必须执行一次再验证条件的场景 | --- ### 关键差异详解(附代码分析) #### 1. **执行顺序差异** - **`while` 循环**(先判断后执行): ```java int i = 6; while(i <= 5) { // 先判断:6<=5为false System.out.println(i); // 不执行 } ``` **结果**:无输出(循环体未执行)[^1] - **`do-while` 循环**(先执行后判断): ```java int i = 6; do { System.out.println(i); // 先执行:输出6 i++; } while(i <= 5); // 后判断:7<=5为false → 退出 ``` **结果**:输出 `6`(循环体执行1次)[^1] #### 2. **初始条件不满足时的行为** - **`while` 循环**:直接跳过 ```c int i = 0; while(i && i!=-10) { // i=0 → 条件为false printf("%d ",i); // 不执行 } ``` **结果**:无输出[^2] - **`do-while` 循环**:至少执行一次 ```c int j = 0; do { printf("%d ",j); // 先执行:输出0 j--; } while(j && j!=-10); // 后判断:j=-1 → 条件为false ``` **结果**:输出 `0`[^2] #### 3. **循环体对条件的影响** ```javascript let i = 10; do { i = i + 2; // 先执行:i=12 alert(i); // 弹出12 } while(i < 10); // 后判断:12<10 → false → 退出 ``` **结果**:弹出 `12`(尽管初始条件 `10<10` 为假,但循环体已修改了条件变量)[^3] --- ### 选择建议 | **场景** | **推荐循环** | |-----------------------------------|--------------| | 需要先验证条件(如读取文件前检查) | `while` | | 必须执行一次(如用户输入验证) | `do-while` | | 循环次数不确定 | 两者皆可 | > 💡 **经验法则**: > 当业务要求“**无论条件如何,代码必须至少运行一次**”时,选择 `do-while`; > 当“**条件不成立时应完全跳过代码**”时,选择 `while`。 --- ### ❓ 相关问题 1. **在哪些实际开发场景中必须使用 `do-while` 循环?** 2. **如何避免 `do-while` 循环因条件变量修改导致的意外循环?** 3. **`do-while` 循环在底层实现上与 `while` 有何差异?** 4. **在 Python 等没有 `do-while` 语法的语言中,如何实现“至少执行一次”的逻辑?**[^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值