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-while
和while
之间的区别在于何时完成比较。使用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 < 10) && (j*j != 25)) ...
【参考方案2】:
不,这两个代码不等价。 do-while
仅在循环结束时检查条件,因此无论i
和j
的初始值如何,i++
、++j
和System.out.println(i * j)
至少发生一次。如果条件不是 true
第一次进入循环,while
将跳过整个循环。
例如,您可以通过在循环之前复制循环体一次来实现与while
相同的效果。
【讨论】:
【参考方案3】:do-while
和 while
之间的主要区别,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 比较的主要内容,如果未能解决你的问题,请参考以下文章