4.3 Операторы цикла
Операторы цикла предназначены для многократного выполнения блоков команд. В языке Java применяются операторы while, do… while и for.
4.3.1 Оператор цикла while
Шаблон оператора цикла while имеет вид:
while (условие) {
// Блок команд
}
При выполнении оператора цикла сначала проверяется условие. Если условие истинно, то выполняется блок команд в теле цикла. Затем условие проверяется снова. Если оно осталось истинным, вновь выполняется блок команд. Если условие стало ложным, то работа оператора цикла прекращается, и управление передается командам, следующим за циклом. Пример цикла while:
int a = 0;
while (a <10) {
System.out.println (a);
a++;
}
System.out.println («Выполнение цикла завершено»);
В этом примере цикл выполняется до тех пор, пока значение переменной a остается меньше 10. Вы уже знакомы с оператором автоинкремента (++), при помощи которого изменяется значение переменной. Если не менять значение переменной в теле цикла, то цикл будет выполняться вечно, потому что условие всегда будет истинным. Иногда такие «вечные циклы» бывают необходимы. Но в большинстве случаев это логическая ошибка, которая приводит к «зацикливанию» программы.
При определенных обстоятельствах может случиться так, что блок команд внутри цикла while не будет выполнен никогда, если условие цикла изначально будет ложным. Например, если перед выполнением цикла переменной a будет присвоено значение 10, то цикл из примера не сработает ни разу.
4.3.2 Оператор цикла do… while
Оператор do… while похож на оператор while, но имеет другую конструкцию, а блок команд будет выполнен как минимум один раз, потому что истинность условия проверяется после выполнения блока:
do {
// Блок команд
} while (условие);
Перепишем предыдущий пример, используя оператор do… while:
int a = 0;
do {
System.out.println (a);
a++;
} while (a <10);
Программа из этого примера выводит в окно терминала числа от 0 до 9. Но если переменную a инициализировать значением 10 или больше, то цикл сработает один раз и выведет начальное значение переменной.
4.3.3 Оператор цикла for
У оператора цикла for наиболее сложная конструкция, которая содержит все компоненты – инициализацию, условие, изменение:
for (инициализация; условие; инкремент/декремент) {
// Блок команд
}
Инициализация переменной цикла выполняется только один раз при обращении к оператору цикла. Затем проверяется истинность условия. Если оно возвращает значение true, то выполняется блок команд. Далее производится вычисление нового значения переменной цикла и вновь проверяется истинность условия. Если оно осталось истинным, то вновь выполняется блок команд. Цикл повторяется до тех пор, пока условие не перестанет быть истинным.
Пример цикла for:
for (int i=0; i <=10; i++) {
System.out.println (i);
}
Если тело цикла состоит из одной команды, то можно обойтись без фигурных скобок:
for (int i=0; i <=10; i++) System.out.println (i);
4.3.4 Вложенные циклы
Оператор цикла может быть вложен в тело другого цикла. В этом случае при каждом проходе внешнего цикла будет срабатывать и полностью выполняться вложенный цикл. Вложенные циклы обычно требуются для последовательного перебора элементов двумерных или многомерных структур (матриц, массивов, таблиц) и выполнения действий с этими элементами.
В листинге 4.3 во внешнем цикле последовательно перебираются дни недели weekDay, с первого по седьмой. При каждом проходе цикла выводится на печать номер дня недели, затем запускается вложенный цикл. Когда вложенный цикл отработал, выполняется перенос строки при помощи управляющей последовательности \n и запускается следующая итерация внешнего цикла.