为什么要使用“do while”循环?

时间:2010-06-09 06:14:14

标签: language-agnostic while-loop do-while

我永远不明白为什么在循环时使用是必要的。我理解他们做了什么,这是执行while循环包含的代码而不检查条件是否为真。

但不是以下代码:

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

完全相同:

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

也许我是非常愚蠢的,并且遗漏了一些显而易见的东西,但是我没有看到上使用上面的例子时的好处。

9 个答案:

答案 0 :(得分:17)

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

  • 现在想象一下,这是一个大块而不是一条线,它不仅会带来不必要的视觉空间,而且还会难以维持并吸引不一致

答案 1 :(得分:15)

您的示例代码错误:

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

这将是实际形式:

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

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

答案 2 :(得分:6)

同时会至少运行一次 - 让你这样做,而......在某些情况下需要满足条件才能开始......

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

答案 3 :(得分:4)

怎么样:

do{

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

} while(i%10);




当然你不会写出:

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

while(i%10){

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

} 



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

修改
或者您将使用程序..

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

它是编写代码的更好方法:

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

可以使用do-while编写:

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

有更好的做法,但我现在不记得了。

答案 6 :(得分:1)

您遗失的是,您对do...while的使用是100%错误

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

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

看到完全缺少第二块?查看while 如何完全结束语句?那么现在发生的事情是{...}do之间的while对中的代码将被执行,然后 someBooleanCondition将被测试,如果这是真的,代码块将再次执行。然后再次。然后再次。直到someBooleanCondition被测试为假。

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

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

但是,此代码要求您输入两次相同(可能很大且复杂的)代码,使门打开以获得更多错误。因此需要一个底部测试循环而不是顶部测试循环。

答案 7 :(得分:1)

首先,您的do..while语法错误。就像这样:

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

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

答案 8 :(得分:0)

虽然

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

可以写成

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

前者更容易理解。