2010-06-09 159 views
7

我从来没有理解为什么使用做,而循环是必要的。我明白他们在做什么,哪个是执行while循环包含的代码,而不检查条件是否为真。为什么使用“do while”循环?

但不是下面的代码:

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

确切一样:

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

也许我是非常愚蠢和缺少明显的东西出来,但我没有看到使用的好处,而我的上面的例子则使用

+6

Dupe of http://stackoverflow.com/questions/994905/is-there-ever-a-need-for-a-do-while-loop – sharptooth 2010-06-09 06:22:10

回答

14

你的示例代码是错误的:

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

这将是实际的形式:

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

你是正确的,它签入之前执行的内部代码块g的条件,但它不需要按照你的方式复制内部代码块。 do/while结构(正如你已经说过的)确保一段代码被执行一次或多次而不是0次或多次(取决于条件)。

+0

我现在看到,我没有意识到它可以节省你表单必须复制内部代码。谢谢您的帮助。 – Stanni 2010-06-09 06:27:03

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 
2

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

因此,基本上,可读性和基本的SE原则。

1

你缺少的是你使用上面的do...while是100%错误

一个do...while循环在Java中,例如,看起来是这样的:

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

请参阅完全没有第二块有吗?看看while如何完全结束的声明?那么现在发生的是和while之间的{...}对中的代码将得到执行,然后someBooleanCondition将得到测试,如果它是真的,代码块将再次执行。然后再次。然后再次。直到someBooleanCondition被测试为假。

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

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

此代码,但是,要求您两次键入相同的(潜在的巨大和复杂)的代码,使门打开更多的错误。因此需要底部测试循环而不是顶部测试循环。

1

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

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

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

16
  • 正如你看到的,你不得不重复相同线在第二个例子。 当你保持,你很可能希望这两条线是相同的,但你有自己重复

  • 现在想象一下,这是一个大块,而不是一条线,不仅会冒不必要的宝贵视觉空间,但它也将是难以维持,吸引不一致

0

其编写代码更好的方法:

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

可以用做,而作为被写成:

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

有做,而更好的例子,但我做不到回忆在这个时候。

2

什么:

do{ 

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

} while(i%10); 




当然你不会写:

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

while(i%10){ 

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

} 



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

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

+0

什么语言有做,但没有程序? – 2010-06-09 07:58:00

+0

你可能会把100000行代码放入一个函数中......但要点。 – 2012-11-13 18:25:11

0

虽然

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

可以写成

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

前者更容易理解。