【问题标题】:do-while and while comparisondo-while 和 while 比较
【发布时间】: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,你提到的不是交换循环的正确方法,同时保持功能完整。
  • 不要按执行比较,先按定义比较,然后你就会知道哪里会发生变化
  • 谢谢你们这么快的解释,非常感谢。

标签: java loops while-loop do-while


【解决方案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);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-12-26
        • 1970-01-01
        • 2015-07-03
        • 2014-10-03
        • 1970-01-01
        • 2016-02-21
        • 1970-01-01
        • 2015-05-24
        相关资源
        最近更新 更多