时
if(a)
{
do
{
b();
}
while(a);
}
完全像
while(a)
{
b();
}
答案 0 :(得分:1)
是的,它们是一样的。
您创建了一种非常难以理解的方法来使用while
循环+ do-while
来模拟if
循环。
你应该读到这个:
Test loops at the top or bottom? (while vs. do while)
如果要在循环的第一次迭代之前测试条件,请使用 while 循环。
如果要在运行循环的第一次迭代后测试条件,请使用 do-while 循环。
答案 1 :(得分:1)
是的,它们是等价的
如果a
为false
,则b
根本不会执行
如果a
为true
,则b
会一直执行,直到a
变为false
。
对于这两种结构同样如此。
答案 2 :(得分: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循环中,您必须将其更改两次。
我确实同意这些事情是关闭的,你应该避免它们,但也有一些有利于他们的论据。
答案 3 :(得分:1)
在这种情况下,构造几乎可以互换,但我认为if do while循环在某些情况下很有用,例如,如果需要在循环的所有迭代中保留一些变量,但是如果循环不需要从未被执行过。 (并且假设它可能不是。)例如
if (condition) {
LargeComplexObject object = new LargeComplexObject();
do {
some action
...
object.someMethod();
...
more actions
}
while (condition);
}
如果该对象的初始化是时间或内存密集的,那么这可能是一个有用的优化,并且预计该循环只会偶尔触发,并且在相关方法的大多数执行中将被跳过。当然在其他情况下它也可能有用,基本上我认为如果在循环开始之前应该执行的事情应该使用if-do-while,只有在输入循环时才会使用。
答案 4 :(得分:0)
是,但您应该更喜欢后者。