do-while 和 while 比较

Posted

技术标签:

【中文标题】do-while 和 while 比较【英文标题】:do-while and while comparison 【发布时间】:2013-12-01 10:18:37 【问题描述】:

同时做:

do
 
    i++; 
    ++j;
    System.out.println( i * j );


while ((i < 10) && (j*j != 25));

我目前正在学习 do-while 与 while,并想改用 while 重写上面的 java 片段(已经声明和初始化)。以下重写的代码是否正确:

同时:

while ((i < 10) && (j*j != 25))

    i++;  
    ++j;
    System.out.println( i * j );

【问题讨论】:

当然,区别在于何时进行条件检查。在 do-while 中,主体总是至少执行一次。否则,真的无话可说。 while 是一个进入检查循环,而do-while 是一个退出检查循环NO,你提到的不是交换循环的正确方法,同时保持功能完整。 不要按执行比较,先按定义比较,然后你就会知道哪里会发生变化 谢谢你们这么快的解释,非常感谢。 【参考方案1】:

do-whilewhile 之间的区别在于何时完成比较。使用do-while,您将在最后进行比较,因此至少进行一次迭代。

您的示例的等效代码

do
 
    i++; 
    ++j;
    System.out.println( i * j );


while ((i < 10) && (j*j != 25));

相当于:

i++; 
++j;
System.out.println( i * j );
while ((i < 10) && (j*j != 25)) 
    i++; 
    ++j;
    System.out.println( i * j );

一般理解

do-while 循环是一个退出控制的循环,这意味着它在结束时退出。 while 循环是一个入口控制循环,这意味着在开始时会测试条件,因此循环内的代码甚至可能不会被执行。

do 
    <block>
 while (<condition>);

相当于:

<block>
while (<condition>) 
    <block>
;

用例

do-while 的典型用例如下:您询问用户某事并希望在输入不正确时重复该操作。

do 
   // Ask something
 while (input is not correct);

在这种情况下,您想至少询问一次,这通常比使用while 更优雅,后者需要复制代码、添加额外条件或设置任意值以强制进入循环第一次。

相反,while 循环更为常见,可以轻松替换 do-while(并非所有语言都有这两个循环)。

【讨论】:

虽然它为这个例子展示了它是如何完成的,但它忽略了需要重新考虑逻辑的一点。 @user2860598 我试图考虑您的评论。好点吗?你认为还有什么需要解释的吗? @user2860598 我想我想要得到的是,你如何从另一个变为另一个......解释的唯一方法是非常例子。好帖子:D 我知道这是旧的,但是为什么你需要在 while 之外重复整个块?为什么不只是声明和初始化变量呢?喜欢int i = 0, j = 0; while ((i &lt; 10) &amp;&amp; (j*j != 25)) ... 【参考方案2】:

不,这两个代码不等价。 do-while 仅在循环结束时检查条件,因此无论ij 的初始值如何,i++++jSystem.out.println(i * j) 至少发生一次。如果条件不是 true 第一次进入循环,while 将跳过整个循环。

例如,您可以通过在循环之前复制循环体一次来实现与while 相同的效果。

【讨论】:

【参考方案3】:

do-whilewhile 之间的主要区别,do-while 保证您在检查前至少运行一次代码。

*不需要再复杂了。

【讨论】:

【参考方案4】:

Do-While 循环对于此类情况非常有用,在这些情况下,您向用户提出问题,而用户必须回答该问题才能终止程序。 例如这段代码:

import java.util.Scanner;

public class DoWhile 

    public static void main(String[] args) 
        int answer;
        do 
            System.out.println("What is 5+5?");
            Scanner scan = new Scanner(System.in);
            answer = scan.nextInt();
         while (answer != 10);
    

【讨论】:

以上是关于do-while 和 while 比较的主要内容,如果未能解决你的问题,请参考以下文章

java基础知识—循环结构

for while do-while三种循环体的特点和缺点

Java while循环

C#视频forwhiledo-while三种循环

JavaScript ECMAScript5基础语法

实验五——循环结构学习总结