2009-11-15 86 views
3

如果“标志”为真,我必须执行步骤编号。 1否则跳过它。有没有一种方法可以跳过循环中不必要的重复检查。 (作为标志的值不改变,而循环的执行)检查循环内的条件

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

从提供的信息。目前还不清楚你想要做什么。你能详细说明吗? – cschol 2009-11-15 20:20:54

+0

跳过检查的唯一方法是创建两个循环,一个与步骤,一个没有它 – 2009-11-15 20:51:50

+0

看起来像我的功课可疑... Vishal - 你为什么不发布你正在工作的真正问题,以及你的关于这件事的想法是...... – 2009-11-16 04:28:17

回答

10

我不确定在这个级别担心优化是否高效。一般来说,让程序运行并继续下一个问题更为重要。

说了这么多,有一个名为loop unswitching的优化,一些编译器会为你做。他们复制循环,一次和一次没有条件,并将条件向外移动来选择循环。 (在你的例子中,你可以使整个循环有条件,但我认为这只是Stack Overflow简化的人为因素。)

但这只是一个理由,不要过多担心优化问题,至少直到你有一个配置文件,你知道这个代码区域负责可检测的运行时间量。

不过,这是最好的清洁,你可以通过类似这样的问题令人费解会教你的东西好写代码...

事实上,循环不变条件语句打扰我了。我不相信有一个普遍的答案。有更高级的函数或lambda表达式,“编译器留下的答案”,重构整个外部例程的答案......我通常会批准任何使代码看起来更小的代码。你必须为了区分优先......

0

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

0

如果价值做在回路中的任何时候变化,你必须检查每一次它除非你重写代码,以便做==真状态电流回路外处理(也许在一个更小的循环中;这取决于你想要做什么[没有双关语意图])。

0
while (man > woman) { 

小心无限循环这里:-)