while (условие)
(пока) - простой цикл с предусловием - он будет выполнять указанную инструкцию или блок кода если и до тех пор, пока условие
верно - имеет значение true
:
while (true); // здесь программа зависнет НАВСЕГДА =)
while (условие) инструкция;
while (условие) {
инструкция;
}
Один вызов инструкции или блока кода внутри цикла называется итерацией цикла
По сути while
работает как if
, но после выполнения инструкции возвращается обратно к проверке условия. Давайте сделаем свой while
через goto
:
start:
if (условие) {
// код
goto start;
}
Из этого следует важный момент: даже в самый первый раз инструкция выполнится только в том случае, если условие выполняется. Следующий цикл выполнится 5 раз, т.е. сделает 5 итераций:
int i = 5;
while (i > 0) {
i -= 1;
}
На протяжении работы цикла переменная i
будет уменьшаться до 0
, и как только его достигнет - цикл завершит работу. Если начальное значение i
будет 0
- тело цикла не выполнится ни разу. Этим while
отличается от своей разновидности - цикла do-while
.
Счётчик #
while
часто используется как цикл, который нужно выполнить заданное количество раз. Предыдущий пример можно сократить при помощи декремента:
int i = 5;
while (i--) {
// i == 4, 3, 2, 1, 0
}
// i == -1
Также можно встретить вот такой синтаксис:
int i = 5;
while (i --> 0) {
// i == 4, 3, 2, 1, 0
}
Где -->
это не какой-то новый оператор, а просто по-другому стоящие пробелы, чтобы запись была похожа на стрелочку. То есть (i --> 0)
равносильно (i-- > 0)
.
Ожидание #
Одно из применений цикла while
- ожидание какого-то события. Например ожидание нажатия кнопки - проверяем состояние кнопки и не продолжаем выполнение программы, пока она не нажмётся:
while (кнопка_не_нажата());
Часто используется бесконечное ожидание с постоянным вызовом инструкции:
while (true);
while (true) {
}
Цикл do while #
do
- цикл с постусловием, то есть сначала выполняется инструкция, а затем проверяется условие. Дословно - делать, пока условие
верно. Синтаксис такой:
do {
инструкция;
} while (условие);
do инструкция; while (условие);
Таким образом инструкция или блок кода будут выполнены как минимум один раз, и только потом проверится условие.
Управление циклом #
Оператор break #
break
(остановить) позволяет прервать текущую итерацию и сразу же покинуть цикл:
int i = 5;
while (i > 0) {
i -= 1;
if (i == 2) break;
// здесь i будет иметь значения 4, 3
}
Или перепишем пример с кнопкой - выход из цикла, если кнопка нажата:
while (true) {
// код...
if (кнопка_нажата) break;
}
Оператор continue #
continue
(продолжить) позволяет прервать текущую итерацию и вернуться к началу цикла, в случае с while
- к проверке условия:
int i = 5;
while (i > 0) {
i -= 1;
if (i > 2) continue;
// здесь i будет иметь значения 2, 1, 0
}