if(){do{};while();}是否与while{}完全相同?

6

Is

if(a)
{
    do
    {
        b();
    }
    while(a);
}

完全像

while(a)
{
    b();
}

?


3
可能是 Test loops at the top or bottom? (while vs. do while) 的重复问题。 - Niko
测试一下吧 :-P http://jsfiddle.net/LvWtY/ - gen_Eric
我刚刚找到了一个例子,证明它们不是一样的。看这个:http://jsfiddle.net/PTbZS/41/ 是可以工作的,而 http://jsfiddle.net/PTbZS/42/ 则不行。(我知道这不是很清楚,但请查看函数 modify)。 - user1365010
7
@Brian: 在第一个片段中,你漏掉了 if(a) - Felix Kling
3
如果你知道内容不是很清晰,那就把它简化一点。这些例子在处理问题时包含了很多不必要的代码。除非你仔细阅读代码,否则很难看出任何差异。老实说,鉴于这些庞然大物(即这些例子),我认为更可能是你做错了什么,而不是这两个结构不等价(因为它们是等价的)。 - Felix Kling
显示剩余10条评论
5个回答

1

它们是相同的,我将提供一个例子,您可能实际上想使用“Do-While”而不是while循环。

do{
    x = superMathClass.performComplicatedCalculation(3.14);
}
while (x < 1000);

与...相反

x = superMathClass.performComplicatedCalculation(3.14);
while ( x < 1000);
{
      x = superMathClass.performComplicatedCalculation(3.14);
}

使用Do-While的理由如上所示。假设这行代码x = superMathClass.performComplicatedCalculation(3.14);不只是一行,而是25行。如果你需要改变它,在do while循环中你只需要改变一次。在while循环中你需要改变两次。

我同意do while循环有缺陷,应该避免使用,但也有支持它们的论点。


1

是的,它们是相同的。
你用do-while循环+if创建了一种非常难以阅读的方式来嘲笑while循环。

你应该阅读这篇文章:
测试循环在顶部还是底部?(while vs. do while)

当你想在循环的第一个迭代之前测试一个条件时,请使用while循环。

当你想在运行第一个迭代后测试一个条件时,请使用do-while循环。


1

是的,它们是等价的。
如果afalseb将根本不会执行。
如果atrueb将一直执行,直到a变为false
这对于两种结构来说同样适用。


1
构造在这种情况下基本上是可互换的,但我认为,如果需要在循环的所有迭代中保留某些变量,但如果循环从未执行则不需要这些变量,则if do while循环在某些情况下非常有用。(并且假设可能不会执行。)例如
        if (condition) {
            LargeComplexObject object = new LargeComplexObject();
            do {
                some action
                ...
                object.someMethod();
                ...
                more actions
            }
            while (condition);
        }

如果对象的初始化需要耗费大量时间或内存,并且预计该循环只会偶尔触发并且在大多数相关方法的执行中将被跳过,则此优化可能非常有用。当然,还有其他一些情况也可能很有用,基本上我认为 if-do-while 应该在你的循环开始之前执行某些操作时使用,仅在进入循环时执行。


0

是的,但你应该更喜欢后者。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接