3

我正在使用 Do While 循环,但我必须测试在循环中途是否满足该条件,以便如果满足,它将跳过该部分。有没有一种有效的方法来做到这一点?

例如,我目前有这样的事情:

do {
    method1;
    if (!condition) 
        method2;
} while (!condition);

编辑:我道歉,我认为我一开始没有说清楚。条件开始为假,并且在循环期间的某个时刻,其中一种方法会将(全局)“条件”设置为真,此时我希望循环立即结束。我只是认为必须在其中测试循环的结束条件很麻烦,并且想知道我是否遗漏了任何明显的东西。

4

7 回答 7

2

请提供有关方法的更多信息。如果您可以从 method1/2 返回条件,请尝试:

do {
    method1;
} while (!condition && !method2)

或者如果您通过引用传递并且方法返回始终为真:

while (method1 && !condition && method2 && !condition);

或者:

while (!method1 && !method2);

编辑:如果:

public boolean method1/2 { ... logic ... ; condition = true; return condition;}

这几乎不取决于你会做什么。

于 2012-09-22T13:19:27.677 回答
2

我假设您正在寻找的是避免这种额外的效率测试,因为大多数时间都没有满足“条件”(许多中的一个)......这种优化可以通过更深入地研究方法1和方法 2 (或他们正在处理的数据)并在循环之外添加第一个“假步骤”,这将仅在第一次禁用方法 2 的处理。看起来像这样:

prepare_for_loop_entering
do {
   method2
   method1;
} while (!condition);
于 2012-09-22T13:25:57.367 回答
0

如果condition在您引用的所有地方都相同,则

do {
    method1;
    method2;
} while (!condition);

因为在您的 while 循环中,除非您将其设置为 true,否则您的 while 循环condition将始终为 false(!condition将是 true),而method1;不是break;将其设置为 truemethod1;

于 2012-09-22T13:04:34.040 回答
0

下面的代码怎么样:

if(condition)
break;
于 2012-09-22T13:05:26.660 回答
0

那这个呢:

 while (!condition) {
   method1;
if(!condition)
   method2;
}
于 2012-09-22T13:07:16.943 回答
0

这个怎么样:

method1;
while (!condition) {
   method2;
   method1;
}
于 2012-09-22T13:16:14.417 回答
0

使用最通用的循环形式:

while (true)
{
    method1;
    if (!condition) break; 
    method2;
} 

进一步说明

带有条件“条件”的 while 循环完全像:

while (true)
{
    if (condition) break;
    method1;
    method2;
}

do-while 就像:

while (true)
{
    method1;
    method2;
    if (condition) break;
}

我们都不想要这些,因此上面的代码。

于 2013-12-23T18:38:00.823 回答