Освой программирование играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Оператор break
Оператор continue
В Java есть три оператора перехода: break, continue, return. Операторы перехода передают управление другой части программы.
Оператор break завершает последовательность операторов в операторе switch, позволяет выйти из цикла и в качестве оператора безусловного перехода (goto).
Рассмотрим пример выхода из цикла. Используя оператор break, можно вызвать немедленное завершение цикла, пропуская условное выражение и другой код в теле цикла. Когда приложение встречает оператор break внутри цикла, оно прекращает выполнение цикла и передаёт управление оператору, следующему за циклом.
for(int i = 0; i < 100; i++) {
if(i == 5) break; // выходим из цикла, если i равно 5
mInfoTextView.append("i: " + i + "\n");
}
mInfoTextView.append("Цикл завершён");
Получим следующий результат:
i: 0 i: 1 i: 2 i: 3 i: 4 Цикл завершён
Вроде хотели, чтобы цикл for выполнялся от 0 до 100, а сами коварно вышли из него, когда значение переменной i стало равным 4.
Код можно переписать с использованием цикла while:
int i = 0;
while(i < 100) {
if(i == 5) break; // выходим из цикла, если i равно 5
mInfoTextView.append("i: " + i + "\n");
i++;
}
mInfoTextView.append("Цикл завершён");
Результат будет такой же.
При использовании вложенных циклов оператор break осуществляет выход только из самого внутреннего цикла, не оказывая влияния на внешний цикл. Создадим пример с использованием вложенных циклов:
for (int i = 1; i < 4; i++) {
mInfoTextView.append("Проход " + i + ": ");
for (int j = 0; j < 100; j++) {
if (j == 5)
break; // выходим из цикла, если j равно 5
mInfoTextView.append(j + " ");
}
mInfoTextView.append("\n");
}
mInfoTextView.append("Циклы завершёны");
Получим следующий результат:
Проход 1: 0 1 2 3 4 Проход 2: 0 1 2 3 4 Проход 3: 0 1 2 3 4 Циклы завершёны
В примере оператор break прервал выполнение второго цикла, но первый цикл продолжал работать.
В цикле можно использовать несколько операторов break, но увлекаться не стоит. Лучше переделайте код.
В Java нет оператора безусловного перехода goto. Если вы не знаете, что это такое, то можете смело пропустить данный абзац. У оператора break есть особая форма записи:
break метка;
Обычно метка - это имя метки, идентифицирующей блок кода. Я ни разу не встречал в реальных примерах данный способ, поэтому не буду приводить пример использования, чтобы вас не запутать.
Иногда требуется, чтобы повторение цикла начиналось с более раннего оператора его тела. В циклах while и do-while оператор continue вызывает передачу управления непосредственно управляющему условному выражению цикла. В цикле for управление передаётся вначале итерационной части цикла for, а потом условному выражению. При этом во всех циклах промежуточный код пропускается.
В следующем примере выводим два числа в каждой строке:
for (int i = 0; i < 10; i++) {
mInfoTextView.append(i + " ");
if (i % 2 == 0)
continue;
mInfoTextView.append("\n");
}
В этом коде оператор % служит для проверки чётности значения переменной i. Если значение чётное, выполнение цикла продолжится дальше, а если нечётное, то произойдёт переход на новую строку. В результате мы получим следующий текст:
0 1 2 3 4 5 6 7 8 9
Как и оператор break, оператор continue может содержать метку содержащего его цикла, который нужно продолжить. Создадим пример вывода треугольной таблицы умножения чисел от 0 до 9.
outer: for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
if (j > i) {
mInfoTextView.append("\n");
continue outer;
}
mInfoTextView.append(" " + (i * j));
}
}
mInfoTextView.append("\n");
В этом примере оператор continue прерывает цикл подсчёта значений переменной j и продолжает его со следующей итерации цикла подсчёта переменной i. На экране увидим текст в таком виде:
0 0 1 0 2 4 0 3 6 9 0 4 8 12 16 и т.д.
Данный оператор в практике встречается достаточно редко. Но на всякий случай помните о нём. Иногда он может пригодиться.
Оператор return используют для выполнения явного выхода из метода. Оператор можно использовать в любом месте метода для возврата управления тому объекту, который вызвал данный метод. Таким образом, return прекращает выполнение метода, в котором он находится.