Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Операторы перехода break, continue, return

Оператор break
Оператор continue

В Java есть три оператора перехода: break, continue, return. Операторы перехода передают управление другой части программы.

Оператор break

Оператор 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, но увлекаться не стоит. Лучше переделайте код.

break как замена goto

В Java нет оператора безусловного перехода goto. Если вы не знаете, что это такое, то можете смело пропустить данный абзац. У оператора break есть особая форма записи:

break метка;

Обычно метка - это имя метки, идентифицирующей блок кода. Я ни разу не встречал в реальных примерах данный способ, поэтому не буду приводить пример использования, чтобы вас не запутать.

Оператор continue

Иногда требуется, чтобы повторение цикла начиналось с более раннего оператора его тела. В циклах 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 используют для выполнения явного выхода из метода. Оператор можно использовать в любом месте метода для возврата управления тому объекту, который вызвал данный метод. Таким образом, return прекращает выполнение метода, в котором он находится.

Реклама