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】:是的,它们是等价的。
如果a
是false
,则b
根本不会执行。
如果a
是true
,则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 完全一样的主要内容,如果未能解决你的问题,请参考以下文章