13

我从来不明白为什么需要使用do while循环。我了解他们的工作,即执行 while 循环包含的代码,而不首先检查条件是否为真。

但不是下面的代码:

do{
    document.write("ok");
}
while(x == "10");

完全一样:

document.write("ok");
while(x == "10"){
    document.write("ok");
}

也许我非常愚蠢并且遗漏了一些明显的东西,但我没有看到在上面的例子中使用do while的好处。

4

9 回答 9

19
  • 如您所见,您必须在第二个示例中重复同一行。维护时,您很可能希望这两行相同,但您自己重复了。

  • 现在想象一下,这是一个大块而不是一条线,不仅会占用不必要的宝贵视觉空间,而且会更难维护和吸引不一致

于 2010-06-09T06:22:05.730 回答
15

您的示例代码是错误的:

do{
    document.write("ok");
}while(x == "10"){
    document.write("ok");
}

这将是实际的形式:

do {
    document.write("ok");
} while(x == "10");

您是正确的,它在检查条件之前执行内部代码块,但它不需要按照您拥有的方式复制内部代码块。do/while 构造(正如您已经说过的)是一种确保一段代码执行 1 次或更多次而不是 0 次或更多次(取决于条件)的方法。

于 2010-06-09T06:20:19.977 回答
6

关于什么:

do{

   //.....
   // 100000 lines of code!
   //.....

} while(i%10);




当然你不会这样写:

//.....
// 100000 lines of code!
//.....

while(i%10){

   //.....
   // 100000 lines of code!
   //.....

} 



然后你将被迫使用do-while 循环
上帝保佑它!

编辑:
或者你将使用程序..

于 2010-06-09T07:39:52.927 回答
5

do while 将至少运行一次 - 让你 do, while... where as while 需要满足条件才能开始......

var i = 6;
do{
    alert(i);
}while( i < 5)

// alerts 6, but while criteria isn't met so it stops

var i = 6;
while( i < 5) {
  alert(i);
}

// no output - while condition wasn't met
于 2010-06-09T06:16:13.533 回答
2

当您有不止一行代码至少要执行一次时,这种差异是最重要的。用 while 循环模拟 do 循环会导致大量代码重复,这总是很糟糕的。当然,更好的解决方案是将该代码重构为一个方法,然后在循环之前和循环中简单地调用相同的方法,但许多人甚至不喜欢那么多重复,并且使用do关键字明确声明“这是一个脚控循环”。

所以,基本上,可读性和基本的 SE 原则。

于 2010-06-09T06:20:58.027 回答
2

它是一种更好的代码编写方式:

int count = ReadDataFromStream();
while(count != 0)
{
    count = ReadDataFromStream();
}

可以使用 do-while 编写为:

int count = 0;
do
{
    count = ReadDataFromStream();
} while(count != 0);

有更好的 do-while 示例,但我现在不记得了。

于 2010-06-09T06:22:38.430 回答
2

虽然

do { 
    s1;
    ...
    sn;
} while (p);

可以写成

boolean done = false;
while (!done) {
    s1;
    ...
    sn;
    done = !p;
}

前者更容易理解。

于 2012-07-24T15:07:17.250 回答
1

您缺少的是您对do...while上述内容的使用是 100%错误的!

例如,Java 中的do...while循环看起来像这样:

do {
  //something you want to execute at least once
} while (someBooleanCondition);

看到那里完全没有第二个街区了吗?看看语句如何完全结束while 所以现在发生的是 和 之间的代码将{...}被执行,然后将被测试,如果它是真的,代码块将再次被执行。然后再次。然后再次。直到被测试为假。dowhile someBooleanConditionsomeBooleanCondition

在这一点上,也许你会明白为什么我们有两种形式的循环。上面的代码可以翻译成:

//something you want to execute at least once
while (someBooleanCondition) {
  //something you want to execute at least once
}

但是,此代码要求您键入两次相同(可能很大且很复杂)的代码,从而为更多错误敞开大门。因此需要底部测试循环而不是顶部测试循环。

于 2010-06-09T06:21:32.820 回答
1

首先你的do..while语法是错误的。它是这样的:

do
{
  document.write("ok");
}while(x=="10");

当您想至少执行一次循环体而不评估其终止条件时,它很有用。例如,假设您想编写一个循环,提示用户输入并根据输入执行一些代码。您会希望它至少执行一次,然后询问用户是否要继续。在这种情况下,do..while与循环相比,循环会产生更少和更清晰的代码while

于 2010-06-09T06:21:51.940 回答