if()do;while(); 是不是与 while 完全一样

Posted

技术标签:

【中文标题】if()do;while(); 是不是与 while 完全一样【英文标题】:Is if()do;while(); exactly like whileif()do;while(); 是否与 while 完全一样 【发布时间】:2012-06-21 13:48:35 【问题描述】:

if(a)

    do
    
        b();
    
    while(a);

一模一样

while(a)

    b();

?

【问题讨论】:

Test loops at the top or bottom? (while vs. do while) 的可能重复项 测试一下:-P jsfiddle.net/LvWtY NO... 它们不完全相同... do .. while(a) ... 将确保至少完成一次然后直到'a'不正确.... while(a) ... 仅当 'a' 为真时才会这样做。 @Brian:你在第一个 sn-p 中错过了if(a) @user1365010:如果你知道它不是很清楚,那就让它更简单。这些示例包含许多针对手头问题的不必要代码。除非您仔细阅读代码,否则不可能看到任何差异。老实说,鉴于这些怪物(示例),我会说你更有可能做错了什么,而不是这两个构造不等价(因为它们是)。 【参考方案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 行代码。如果您需要更改它,在执行过程中您只需更改一次。在 while 循环中,您必须更改它两次。

我确实同意休息时间,你应该避免他们,但也有支持他们的论点。

【讨论】:

【参考方案2】:

是的,它们是等价的。 如果afalse,则b 根本不会执行。 如果atrue,则b 将一直执行,直到a 变为false。 这对两种结构同样适用。

【讨论】:

【参考方案3】:

是的,它们是一样的。 您创建了一种非常难以理解的方式来模拟 while 循环与 do-while 循环 + if

您应该阅读以下内容:Test loops at the top or bottom? (while vs. do while)

如果您想在循环的第一次迭代之前测试条件,请使用 while 循环。

如果您想在运行循环的第一次迭代后测试条件,请使用 do-while 循环。

【讨论】:

【参考方案4】:

在这种情况下,结构几乎可以互换,但我认为 if do while 循环在某些情况下很有用,例如,如果某些变量需要在循环的所有迭代中保留,但如果循环不需要永远不会被执行。 (并且假设它可能不是。)例如

        if (condition) 
            LargeComplexObject object = new LargeComplexObject();
            do 
                some action
                ...
                object.someMethod();
                ...
                more actions
            
            while (condition);
        

如果该对象的初始化是时间或内存密集型的,这可能是一个有用的优化,并且预计此循环只会偶尔触发,并且会在相关方法的大多数执行中被跳过。当然在其他情况下它也可能有用,基本上我认为如果在循环开始之前应该执行一些事情,则应该使用 if-do-while,只有在进入循环时。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于if()do;while(); 是不是与 while 完全一样的主要内容,如果未能解决你的问题,请参考以下文章

while (rs.next()) 与 if(rs.next())的区别

java基础知识—循环结构

[译]Javascript中的do-while循环

Javascript初学篇章_4(循环与函数)

strstr库函数实现

java入门---循环结构 - for, while 及 do...while&break&continue