Перейти к основному содержимому

Ключевые слова Java продолжаются и ломаются

· 4 мин. чтения

Задача: Медиана двух отсортированных массивов

Даны два отсортированных массива размерами n и m. Найдите медиану слияния этих двух массивов.
Временная сложность решения должна быть O(log(m + n)) ...

ANDROMEDA

1. Обзор

В этой быстрой статье мы познакомимся с ключевыми словами continue и break в Java и сосредоточимся на том, как их использовать на практике.

Проще говоря, выполнение этих операторов вызывает ветвление текущего потока управления и завершает выполнение кода в текущей итерации.

2. Заявление о перерыве

Оператор break существует в двух формах: без метки и с меткой.

./1e685a6464893f0ca15d68e0ca6ce8b4.jpg

2.1. Непомеченный перерыв

Мы можем использовать оператор unlabeled для завершения цикла for , while или do- while, а также блока switch-case :

for (int i = 0; i < 5; i++) {
if (i == 3) {
break;
}
}

Этот фрагмент определяет цикл for , который должен повторяться пять раз. Но когда счетчик равен 3, условие if становится истинным , и оператор break прерывает цикл. Это приводит к тому, что поток управления передается инструкции, следующей за концом цикла for .

В случае вложенных циклов немаркированный оператор break завершает только внутренний цикл, в котором он находится . Внешние циклы продолжают выполнение:

for (int rowNum = 0; rowNum < 3; rowNum++) {
for (int colNum = 0; colNum < 4; colNum++) {
if (colNum == 3) {
break;
}
}
}

Этот фрагмент содержит вложенные циклы for . Когда colNum равно 3, условие if оценивается как истинное, а оператор break приводит к завершению внутреннего цикла for . Однако внешний цикл for продолжает повторяться.

2.2. Помеченный разрыв

Мы также можем использовать помеченный оператор break для завершения цикла for , while или do- while. Помеченный break завершает внешний цикл .

По завершении поток управления передается оператору сразу после окончания внешнего цикла:

compare: 
for (int rowNum = 0; rowNum < 3; rowNum++) {
for (int colNum = 0; colNum < 4; colNum++) {
if (rowNum == 1 && colNum == 3) {
break compare;
}
}
}

В этом примере мы ввели метку непосредственно перед внешним циклом. Когда rowNum равен 1, а colNum равен 3, условие if оценивается как истинное , и оператор break завершает внешний цикл.

Затем поток управления передается оператору, следующему за концом внешнего цикла for .

3. Оператор continue

Оператор continue также существует в двух формах: без метки и с меткой.

./1183c973064f0280aa33bbfa6b369d50.jpg

3.1. Без пометки продолжить

Мы можем использовать немаркированный оператор, чтобы обойти выполнение остальных операторов в текущей итерации цикла for , while или do- while. Он переходит к концу внутреннего цикла и продолжает цикл :

int counter = 0;
for (int rowNum = 0; rowNum < 3; rowNum++) {
for (int colNum = 0; colNum < 4; colNum++) {
if (colNum != 3) {
continue;
}
counter++;
}
}

В этом фрагменте всякий раз, когда colNum не равен 3, оператор continue без метки пропускает текущую итерацию, тем самым игнорируя приращение переменной counter в этой итерации. Однако внешний цикл for продолжает повторяться. Таким образом, приращение счетчика происходит только тогда, когда colNum равно 3 на каждой итерации внешнего цикла for .

3.2. Помечено продолжить

Мы также можем использовать помеченный оператор continue , который пропускает внешний цикл. При пропуске поток управления передается в конец внешнего цикла, эффективно продолжая итерацию внешнего цикла:

int counter = 0;
compare:
for (int rowNum = 0; rowNum < 3; rowNum++) {
for (int colNum = 0; colNum < 4; colNum++) {
if (colNum == 3) {
counter++;
continue compare;
}
}
}

Мы ввели метку непосредственно перед внешним циклом. Всякий раз , когда colNum равен 3, счетчик переменной увеличивается. Помеченный оператор continue вызывает пропуск итерации внешнего цикла for .

Поток управления передается в конец внешнего цикла for , который продолжается на следующей итерации.

4. Вывод

В этом руководстве мы рассмотрели различные способы использования ключевых слов break и continue в качестве операторов ветвления в Java.

Полный код, представленный в этой статье, доступен на GitHub .