Цикл for в Java: обычный и расширенный обход
💻 Информатика · 9 класс
Счётчик, сумма массива и enhanced for: когда нужен индекс и что меняет continue.

Как работает обычный for
В Java цикл for объединяет начальную часть, логическое условие и шаг. Инициализация выполняется один раз, условие проверяется перед каждым телом, шаг — после очередной итерации. Пример for (int i = 0; i < 3; i++) даёт значения i: 0, 1, 2. Значение 3 уже не проходит проверку.
Условие в Java должно иметь тип boolean. Число 1 не заменяет true, как в некоторых примерах языка C. Если условие сразу false, тело не выполняется. Переменная, объявленная в заголовке, доступна в условии, шаге и теле, но не за пределами цикла.
Сумма массива
int[] values = {4, 7, 2};
int total = 0;
for (int i = 0; i < values.length; i++) {
total += values[i];
}
System.out.println(total);Получаем 13. Длина массива равна 3, последний индекс равен 2. При условии i <= values.length цикл попытался бы обратиться к values[3], и Java выбросила бы ArrayIndexOutOfBoundsException. Длина и последний индекс — разные числа.
Расширенный for
int total = 0;
for (int value : values) {
total += value;
}
System.out.println(total);Расширенный for последовательно получает элементы массива; он удобен, если индекс не нужен. Слева от двоеточия объявляется переменная элемента, справа находится массив или подходящий Iterable. Здесь value — значение очередного int, а не индекс 0, 1, 2.
Запись value = 0; внутри такого цикла не обнулит элементы массива int: она изменит локальную переменную итерации. Если нужно присвоить новые значения ячейкам, используйте индекс и values[i]. Для объектов нужно отдельно различать изменение переменной-ссылки и изменение самого объекта.
Шаг и управление
Шаг не обязан быть i++: можно обходить каждый второй элемент или двигаться назад. Для обратного обхода массива с int начинают с values.length − 1 и продолжают, пока i >= 0, уменьшая i. У пустого массива начало равно −1, поэтому тело не выполняется.
Continue пропускает остаток текущего тела, затем в обычном for выполняется шаг. Break завершает ближайший цикл полностью. Оба оператора полезны, но слишком много переходов усложняет проверку логики.
Разобранная трассировка
В первом примере до цикла total равен 0. После values[0] он равен 4, после values[1] — 11, после values[2] — 13. Затем i становится 3, проверка 3 < 3 ложна. Индекс не нужно увеличивать ещё раз внутри тела: иначе часть элементов будет пропущена.
Практика
- Сколько итераций у for (int i = 2; i < 5; i++)?
- Что хранит value в расширенном for: элемент или индекс?
- Обнулит ли value = 0 массив int[] values?
Ответы
1. Три: i принимает 2, 3, 4. 2. Элемент, поэтому для массива {4,7,2} получаем именно 4, 7, 2. 3. Нет: меняется локальная переменная. Для изменения ячеек нужен явный доступ values[i] либо другой специально выбранный способ.