Проверка условия только в первом цикле и в остальных циклах выполнить некоторый код

Есть ли способ проверить условие только в первом цикле цикла for и в остальных циклах выполнить некоторый код, если условие было оценено как true? У меня есть цикл 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 ответа

Решение

Я немного запутался, потому что ваш код ничего не делает, если j!=0 - так зачем вообще петля?

Я бы разделил петлю. Вытаскивать i==0 который вызывает первый метод, а затем цикл для i=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();   
      }
    }
  }
}

Я предлагаю вам немного раскрутить петлю.

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;
   }
}

Если я правильно понимаю, что вы хотите, то вы можете проверить два условия один раз и прервать их, если они не сработают. Если им это удастся, установите флаг в true, чтобы он обошел проверки в последующих итерациях.

Попробуйте использовать новый флаг (логическое значение), а также нет необходимости сравнивать логическое значение как истинное, как показано ниже:

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();
    }
 }
}
Другие вопросы по тегам