【问题标题】:Efficient way of checking condition within a do while loop?在 do while 循环中检查条件的有效方法?
【发布时间】:2012-09-14 16:06:33
【问题描述】:

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

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

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

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

【问题讨论】:

  • 似乎是什么问题?
  • 我假设你想离开 while 循环 if !condition 即使在循环中间?
  • 是的,这就是我想做的,但从我所见,因为循环是如此简单,添加一个“break;”它只会让它变得更复杂,因为我仍然需要测试两次条件。
  • 所以,条件更好绕过循环进入下一个循环。
  • @brent 不幸的是,我认为在 Java 中没有一种干净的方法可以做到这一点。重复的if 可能是你最好的选择。

标签: java loops if-statement while-loop do-while


【解决方案1】:

如果condition 在你引用的所有地方都相同

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

在你的 while 循环中condition 将始终为假(!condition 将为真),除非你在 method1; 中将其设置为真,而不是在 break; 中将其设置为真987654327@

【讨论】:

  • 那么没有别的办法了吗?条件可以在循环期间随时设置为真,在方法 1 或 2 中。我可以使用中断;但由于循环的简单性,它实际上几乎相同,如果不是更好的话,我拥有它的方式。但它看起来很乱,我在这里发帖想知道是否有更好的方法 - 但它看起来不像。
  • 我认为没有。对不起。
【解决方案2】:

下面的代码怎么样:

if(condition)
break;

【讨论】:

  • 这是一种可能性,但如果我理解正确,它最终只会添加一行代码?
  • 如果代码在图片中只有一个条件,那么method2 应该在循环之外。是的,额外的代码不会花费您任何费用。
【解决方案3】:

这个呢:

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

【讨论】:

  • 如果他在method1 中将condition 设置为true 会怎样? method2 仍将被访问
  • 这个想法是第一种方法或第二种方法中的某些东西最终会在循环中的某个时间将条件设置为真。如果第一种方法已将其设置为 true,我不想执行第二种方法,但这两种方法必须循环直到发生。
  • 啊,是的,谢谢。在这种情况下我是否使用 while 或执行 while 循环并不重要,因为条件在开始时总是为假。代码仍然重复代码的“!条件”部分,我认为这有点混乱,但这似乎是一个不可避免的问题。还是谢谢你!
【解决方案4】:

这个怎么样:

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

【讨论】:

  • 这与我最初的做法类似,但如果 method2 将条件设置为 true,则程序将无法正常运行。
【解决方案5】:

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

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

或者如果你通过引用传递并且方法返回总是 true:

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

或:

while (!method1 && !method2);

编辑: 如果:

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

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

【讨论】:

  • 这看起来是最好的方法。由于看起来对我所拥有的内容没有任何有效的改进,我将让这些方法返回一个布尔值,并且与您在第三个代码段中的内容类似。谢谢!
  • 方法返回布尔值将导致灾难,因为如果方法返回错误值,while 循环将永远运行。只要保持你的代码简单就可以了。
【解决方案6】:

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

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

【讨论】:

  • 谢谢,解决问题的方法类似于 Vikdor 的提议。正如我提到的那样,我实际上在开始时确实有类似的代码。循环内的条件测试是每次迭代都必须完成的事情,但它不会解决问题。
【解决方案7】:

使用最通用的循环形式:

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

进一步说明

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

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

do-while 就像:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 2017-04-03
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多