如果“标志”为真,我必须执行步骤编号。 1否则跳过它。有没有一种方法可以跳过循环中不必要的重复检查。 (作为标志的值不改变,而循环的执行)检查循环内的条件
private void method(boolean flag) {
while (man > woman) {
if (flag) {
// Step no. 1
System.out.println(flag);
}
}
}
如果“标志”为真,我必须执行步骤编号。 1否则跳过它。有没有一种方法可以跳过循环中不必要的重复检查。 (作为标志的值不改变,而循环的执行)检查循环内的条件
private void method(boolean flag) {
while (man > woman) {
if (flag) {
// Step no. 1
System.out.println(flag);
}
}
}
我不确定在这个级别担心优化是否高效。一般来说,让程序运行并继续下一个问题更为重要。
说了这么多,有一个名为loop unswitching的优化,一些编译器会为你做。他们复制循环,一次和一次没有条件,并将条件向外移动来选择循环。 (在你的例子中,你可以使整个循环有条件,但我认为这只是Stack Overflow简化的人为因素。)
但这只是一个理由,不要过多担心优化问题,至少直到你有一个配置文件,你知道这个代码区域负责可检测的运行时间量。
不过,这是最好的清洁,你可以通过类似这样的问题令人费解会教你的东西好写代码...
事实上,循环不变条件语句打扰我了。我不相信有一个普遍的答案。有更高级的函数或lambda表达式,“编译器留下的答案”,重构整个外部例程的答案......我通常会批准任何使代码看起来更小的代码。你必须为了区分优先......
这取决于do
范围。如果do
始终为真,则不需要检查它,并且可以删除if (do)
。如果变量始终为真,没有理由将变量设置为真。范围是什么?
如果价值做在回路中的任何时候变化,你必须检查每一次它除非你重写代码,以便做==真状态电流回路外处理(也许在一个更小的循环中;这取决于你想要做什么[没有双关语意图])。
while (man > woman) {
小心无限循环这里:-)
从提供的信息。目前还不清楚你想要做什么。你能详细说明吗? – cschol 2009-11-15 20:20:54
跳过检查的唯一方法是创建两个循环,一个与步骤,一个没有它 – 2009-11-15 20:51:50
看起来像我的功课可疑... Vishal - 你为什么不发布你正在工作的真正问题,以及你的关于这件事的想法是...... – 2009-11-16 04:28:17