Аналог for else в java
Работаю с пайтоном, но возникла необходимость написать на джава. В пайтоне есть возможность использовать блок кода else после циклов, после успешного выполнения цикла
for i in range(0,10):
# код цикла
else:
# код после успешного выполнения цикла
Есть ли в джава реализация такого же алгоритма, без введения дополнительной булевой переменной? То есть если в цикле был вызван break, то код выполнять не нужно
Ответы (3 шт):
Оператора такого нет, но можно написать такое. Без дополнительной переменной
for (int i = 0; i < 10; i++) {
// # код цикла
if (!((i+1) < 10)) {
// # код после успешного выполнения цикла
}
}
Написал (i+1) для того чтобы вычислить следующий член итерации. Можно конечно проверить на i == 9 в данном случае. Но в общем с вещественными конечно нужно быть аккуратным на равенстве вещественных чисел
чем то это напоминает такую экзотическую конструкцию:
someSpecialLoop: {
for(int i = 0; i < 10; i++) {
// код цикла
if(/* условие "неуспешного" выполнения */)
break someSpecialLoop;
}
// код после успешного выполнения цикла
}
Как вариант - вынести цикл в метод, вместо break в цикле использовать return.
Например, было:
for i in range(10):
if condition:
break
else:
on_success()
other_code()
Стало:
def test():
for i in range(10):
if condition:
return
on_success()
test()
other_code()
Можно вместо break бросать исключение:
try {
for(int i; i < 10; i++) {
if (condition) {
throw new SomeException();
}
}
onSuccess();
} catch (SomeException ex) {
//
}