3

有没有办法仅在 for 循环的第一个循环中检查条件,如果条件被评估为真,则在其余循环中执行一些代码?我有一个 for 循环和两个基本条件,只需要在第一个循环中检查。如果其中任何一个为真,则在所有其他周期中正在执行一段或另一段代码。我无法在其他周期中检查这些条件,但第一个,因为两者都是正确的,这不是我需要的((

    public void someMethod() {
    int index;
    for (int j = 0; j < 10; j++) {
        if (j == 0 && cond1 == true && cond2 == true) {
            methodXForTheFirstCycle();// this method will change cond2
            methodXForTheRestCycles();// not the right place to put it
        } else if (j == 0 && cond1 == true) {// and cond2 == false
            methodYForTheFirstCycle();// this method will change cond2
            methodYForTheRestCycles();// not the right place to put it
        }
    }
}
4

4 回答 4

2

我建议你稍微松开你的循环。

if (cond1)
   // j == 0
   if (cond2) 
        methodXForTheFirstCycle();
   else 
        methodYForTheFirstCycle();
   cond2 = !cond2;

   for (int j = 1; j < 10; j++) {
     if (cond2)
        methodXForTheRestCycle();
     else 
        methodYForTheRestCycle();
     cond2 = !cond2;
   }
}
于 2012-12-26T16:27:24.573 回答
1

我有点困惑,因为如果你的代码什么都不做j!=0- 那么为什么要循环呢?

我会把循环分开。拉出i==0哪个调用第一个方法,然后循环fori=1 .. 9

这就是我认为您的描述的意思:

public void someMethod() {
  int index;
  if (cond1) {
    if (cond2) {
      methodXForTheFirstCycle();
      for (int j = 1; j < 10; j++) {
        methodXForTheRestCycles();
      }
    } else {
      methodYForTheFirstCycle();
      for (int j = 1; j < 10; j++) {
        methodYForTheRestCycles();   
      }
    }
  }
}
于 2012-12-26T16:10:06.627 回答
0

如果我正确理解您想要什么,您可以做的是检查这两个条件一次,如果它们失败则中断。如果它们成功,则将标志设置为 true,以便它绕过后续迭代中的检查。

于 2012-12-26T16:03:48.237 回答
0

尝试使用新标志(布尔值),也不需要将布尔值比较为真,如下所示:

public void someMethod() {
  int index;
  boolean firstConditionSuccess = false;
  for (int j = 0; j < 10; j++) {
    if (j == 0 && cond1 && cond2) {
        methodXForTheFirstCycle();
        firstConditionSuccess = true;
    } else if (j == 0 && cond1) {// and cond2 == false
        methodYForTheFirstCycle();
        firstConditionSuccess = true;
    }
    if(firstConditionSuccess ){
       methodYForTheRestCycles();
    }
 }
}
于 2012-12-26T16:21:14.660 回答