【问题标题】:Checking condition inside a loop检查循环内的条件
【发布时间】:2010-12-16 20:33:09
【问题描述】:

如果“flag”为真,我必须执行步骤号。 1 否则跳过它。有没有办法在循环中跳过这种不必要的重复检查。 (因为flag的值在循环执行时没有改变)

private void method(boolean flag) {
        while (man > woman) {
            if (flag) {
                // Step no. 1
                System.out.println(flag);
            }
        }
    }

【问题讨论】:

  • 根据提供的信息。目前尚不清楚您要做什么。你能详细说明一下吗?
  • 跳过检查的唯一方法是创建两个循环,一个有步骤,一个没有它
  • 对我来说看起来像是家庭作业...... Vishal - 你为什么不发布你正在处理的真正问题,以及你对此事的想法......

标签: java loops conditional-statements


【解决方案1】:

我不确定在这个级别上担心优化是否有效。通常更重要的是让程序运行并继续处理下一个问题。

话虽如此,有些编译器会为您做一个名为 loop unswitching 的优化。他们复制循环,一次有条件,一次没有条件,然后将条件向外移动以选择循环。 (在您的示例中,您可以使整个循环成为有条件的,但我认为这只是 Stack Overflow 简化的产物。)

但这只是另一个不必过多担心优化的理由,至少在您拥有配置文件并且您知道该代码区域负责可检测的运行时量之前是这样。

不过,最好尽可能简洁地编写代码,这样的问题会让你感到困惑......

事实上,循环不变条件也困扰着我。我不相信有一个普遍的答案。有涉及高阶函数或 lambdas 的奇特答案、“留给编译器”的答案、重构整个外部例程的答案……我通常会赞成任何使代码看起来更小的方法。您必须优先考虑才能区分...

【讨论】:

    【解决方案2】:

    这取决于do 的范围。如果do 始终为真,则不需要检查它,您可以删除if (do)。如果变量始终为真,则没有理由将其设置为真。范围是多少?

    【讨论】:

      【解决方案3】:

      如果 do 的值在循环中的任何时间发生变化,您必须每次检查它,除非您重写代码以便 do == true 状态是在当前循环之外处理的(也许在一个较小的循环中;这取决于你要做什么[没有双关语])。

      【讨论】:

        【解决方案4】:
        while (man > woman) {
        

        注意这里的无限循环 :-)

        【讨论】:

          猜你喜欢
          • 2021-08-09
          • 1970-01-01
          • 2017-04-03
          • 2019-09-04
          • 2013-06-24
          • 1970-01-01
          • 2014-09-12
          • 2011-03-31
          • 1970-01-01
          相关资源
          最近更新 更多