Проверка условия только в первом цикле и в остальных циклах выполнить некоторый код
Есть ли способ проверить условие только в первом цикле цикла 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();
}
}
}