Чтение онлайн

на главную - закладки

Жанры

Программирование на Java

Вязовик Н.А.

Шрифт:

}

Результат выполнения этой конструкции будет аналогичен предыдущему. Однако нужно обратить внимание, что область видимости переменной cnt будет ограничена телом цикла.

Любая часть конструкции for может быть опущена. В вырожденном случае мы получим оператор for с пустыми значениями

for(;;) {

...

}

В данном случае цикл будет выполняться бесконечно. Эта конструкция аналогична конструкции while(true) {

}

.

Условия, в которых она может быть применена, мы рассмотрим позже.

Возможно также расширенное использование синтаксиса оператора for. Предложение и выражение могут состоять из нескольких частей, разделенных запятыми.

for(i = 0, j = 0; i<5; i++, j+=2) {

...

}

Использование такой конструкции вполне правомерно.

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

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

Оператор continue

Оператор continue может использоваться только в циклах while, do, for. Если в потоке вычислений встречается оператор continue, то выполнение текущей последовательности операторов (выражений) должно быть прекращено и управление будет передано на начало блока, содержащего этот оператор.

...

int x = (int)(Math.random*10);

int arr[] = {....}

for(int cnt=0;cnt<10;cnt++) {

if(arr[cnt] == x) continue;

...

}

В данном случае, если в массиве arr встретится значение, равное x, то выполнится оператор continue и все операторы до конца блока будут пропущены, а управление будет передано на начало цикла.

Если оператор continue будет применен вне контекста оператора цикла, то будет выдана ошибка времени компиляции. В случае использования вложенных циклов оператору continue, в качестве адреса перехода, может быть указана метка, относящаяся к одному из этих операторов.

Рассмотрим пример:

public class Test {

public Test {

}

public static void main(String[] args) {

Test t = new Test;

for(int i=0; i < 10; i++) {

if(i % 2 == 0) continue;

System.out.print(" i=" + i);

}

}

}

В результате работы на консоль будет выведено:

i=1 i=3 i=5 i=7 i=9

При выполнении условия в строке 7 нормальная последовательность выполнения операторов будет прервана и управление будет передано на начало цикла. Таким образом, на консоль будут выводиться только нечетные значения.

Оператор break

Этот оператор, как

и оператор continue, изменяет последовательность выполнения, но не возвращает исполнение к началу цикла, а прерывает его.

public class Test {

public Test {

}

public static void main(String[] args) {

Test t = new Test;

int [] x = {1,2,4,0,8};

int y = 8;

for(int cnt=0;cnt < x.length;cnt++) {

if(0 == x[cnt]) break;

System.out.println("y/x = " + y/x[cnt]);

}

}

}

На консоль будет выведено:

y/x = 8

y/x = 4

y/x = 2

При этом ошибки, связанной с делением на ноль, не произойдет, т.к. если значение элемента массива будет равно 0, то будет выполнено условие в строке 9 и выполнение цикла for будет прервано.

В качестве аргумента break может быть указана метка. Как и в случае с continue, нельзя указывать в качестве аргумента метки блоков, в которых оператор break не содержится.

Именованные блоки

В реальной практике достаточно часто используются вложенные циклы. Соответственно, может возникнуть ситуация, когда из вложенного цикла нужно прервать внешний. Простое использование break или continue не решает этой задачи, однако в Java можно именовать блок кода и явно указать операторам, к какому из них относится выполняемое действие. Делается это путем присвоения метки операторам do, while, for.

Метка - это любая допустимая в данном контексте лексема, оканчивающаяся двоеточием.

Рассмотрим следующий пример:

...

int array[][] = {...};

for(int i=0;i<5;i++) {

for(j=0;j<4; j++) {

...

if(array[i][j] == caseValue) break;

...

}

}

...

В данном случае при выполнении условия будет прервано выполнение цикла по j, цикл по i продолжится со следующего значения. Для того, чтобы прервать выполнение обоих циклов, используется метка:

...

int array[][] = {:..};

outerLoop: for(int i=0;i<5;i++) {

for(j=0;j<4; j++) {

...

if(array[i][j] == caseValue)

break outerLoop;

...

}

}

...

Оператор break также может использоваться с именованными блоками.

Между операторами break и continue есть еще одно существенное отличие. Оператор break может использоваться с любым именованным блоком, в этом случае его действие в чем-то похоже на действие goto. Оператор continue (как и отмечалось ранее) может быть использован только в теле цикла. То есть такая конструкция будет вполне приемлемой:

Поделиться:
Популярные книги

Ермак. Регент

Валериев Игорь
10. Ермак
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Ермак. Регент

На прицеле

Кронос Александр
6. Лэрн
Фантастика:
фэнтези
боевая фантастика
стимпанк
5.00
рейтинг книги
На прицеле

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Сексуальная жизнь мужчины. Книга 1

Еникеева Диля Дэрдовна
Дом и Семья:
образовательная литература
здоровье и красота
7.00
рейтинг книги
Сексуальная жизнь мужчины. Книга 1

Жизнь-поиск

Данилов Борис Федорович
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Жизнь-поиск

Морана

Кулаков Алексей Иванович
Фантастика:
фэнтези
альтернативная история
5.00
рейтинг книги
Морана

Маршалы и генсеки

Зенькович Николай Александрович
Тирания
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Маршалы и генсеки

Жизнь с препятствиями

Кривин Феликс Давидович
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
Жизнь с препятствиями

Игры патриотов

Клэнси Том
1. Джек Райан
Детективы:
триллеры
6.86
рейтинг книги
Игры патриотов

Тринадцатый VII

NikL
7. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.25
рейтинг книги
Тринадцатый VII

"Люди, годы, жизнь", книга VI

Эренбург Илья Григорьевич
Проза:
классическая проза
6.25
рейтинг книги
Люди, годы, жизнь, книга VI

Первый среди равных. Книга VII

Бор Жорж
7. Первый среди Равных
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Первый среди равных. Книга VII

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

"Фантастика 2025-123". Компиляция. Книги 1-32

Ипатова Наталия Борисовна
Фантастика 2025. Компиляция
Фантастика:
боевая фантастика
попаданцы
мистика
фэнтези
5.00
рейтинг книги
Фантастика 2025-123. Компиляция. Книги 1-32