Циклы (for и while)
Во многих задачах нужно повторять одно и то же действие много раз:
перебрать числа от 1 до 100, прочитать N значений, посчитать сумму, найти максимум и т.п.
Для этого в Java есть циклы. В базовых задачах почти всегда хватает двух:
while— повторять, пока условие истинно;for— повторять фиксированное количество раз (обычно по счётчику.
Основное
Две основные формы цикла:
Чаще всего:
for— когда заранее известно количество повторений (например, ровно N чисел);while— когда повторяем «пока выполняется условие» (например, пока не встретили конец ввода или специальный знак).
Цикл while
Цикл while повторяет блок кода, пока условие истинно.
Порядок работы:
- проверяется условие
x > 0; - если условие истинно — выполняется тело цикла;
- после тела снова проверяется условие, и так далее;
- если условие стало ложным — цикл заканчивается.
Важно, чтобы внутри цикла что‑то менялось, иначе можно получить бесконечный цикл.
Цикл for
Цикл for удобно использовать, когда нужно пройти по диапазону чисел.
Здесь:
int i = 0— начальное значение счётчика;i < 5— условие продолжения цикла;i++— изменение счётчика после каждой итерации (то же, чтоi = i + 1).
В результате будут выведены числа 0, 1, 2, 3, 4.
Другой частый вариант — от 1 до N включительно:
Здесь условие i <= n, поэтому последнее число — n.
Сумма и количество
Частый шаблон: прочитать N чисел и посчитать их сумму.
int n = in.nextInt();
int sum = 0;
for (int i = 0; i < n; i++) {
int x = in.nextInt();
sum = sum + x; // или sum += x;
}
System.out.println(sum);
Здесь цикл for повторяется ровно n раз, каждый раз читается одно число.
Похожий шаблон для подсчёта количества:
int n = in.nextInt();
int countPositive = 0;
for (int i = 0; i < n; i++) {
int x = in.nextInt();
if (x > 0) {
countPositive++;
}
}
System.out.println(countPositive);
Минимум и максимум в последовательности
Ещё один стандартный приём — найти минимальное и максимальное значение.
int n = in.nextInt();
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
for (int i = 0; i < n; i++) {
int x = in.nextInt();
if (x < min) {
min = x;
}
if (x > max) {
max = x;
}
}
System.out.println("min = " + min);
System.out.println("max = " + max);
Этот шаблон часто используется и для массивов.
Цикл while до конца ввода
Иногда заранее неизвестно, сколько чисел будет во входе. Тогда удобно использовать while с проверкой наличия следующего числа:
int sum = 0;
while (in.hasNextInt()) {
int x = in.nextInt();
sum = sum + x;
}
System.out.println(sum);
Цикл будет читать числа, пока во входе есть очередное целое (hasNextInt() возвращает true).
Когда числа закончатся, hasNextInt() даст false, и цикл завершится.
Что нужно запомнить
Цикл while повторяет тело, пока условие истинно:
Цикл for чаще всего используют для прохода по диапазону значений счётчику:
Для типичных задач по входным данным полезно запомнить шаблоны: сумма, количество, минимум/максимум и чтение до конца ввода.
В C++ основные циклы такие же: while и for.
while— выполнять, пока условие истинно.for— выполнять по счётчику (обычно, когда заранее понятно количество повторений).
Форма while
Форма for
Пример: отсчёт назад
Пример: сумма N чисел
int n;
std::cin >> n;
long long sum = 0;
for (int i = 0; i < n; i++) {
int x;
std::cin >> x;
sum += x;
}
std::cout << sum << "\n";
Пример: чтение до конца ввода
В Python есть while и for, но for чаще используют для прохода по диапазону или по элементам.
while— выполнять, пока условие истинно.for— пройти по последовательности (например, поrange(...)).
Форма while
Форма for по range
Пример: отсчёт назад
Пример: сумма N чисел
Пример: чтение до конца ввода
Запись цикла for
В Java и C++ for состоит из трёх частей: инициализация, условие, шаг. В Python for обычно проходит по range(...) или по элементам, а шаг и границы задаются в range.
Границы диапазона
Java/C++ часто пишут i < n, и тогда значения идут 0, 1, ..., n-1. В Python это ровно так же работает с range(n).
Скобки и отступы
В Java и C++ тело цикла обычно выделяют фигурными скобками { ... }. В Python тело цикла задаётся отступами.