Цикл for в Java
Цикл for повторяет блок кода заданное число раз. Это самая универсальная итеративная конструкция, удобная, когда количество повторов известно заранее или когда нужен явный счётчик.
В Java различают классический for с инициализацией, условием и шагом и enhanced for (for-each) — упрощённый цикл для прохода по массиву или коллекции. Обе формы компилируются в одно и то же по логике, но for-each более лаконичен и безопаснее.
Синтаксис
// Классический
for (инициализация; условие; шаг) {
// тело
}
// for-each
for (Тип элемент : коллекция) {
// тело
}
Пример 1. Печать чисел от 1 до 5
public class ForBasic {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println("i = " + i);
}
}
}
Вывод:
i = 1
i = 2
i = 3
i = 4
i = 5
Пример 2. Сумма от 1 до 10
public class Sum {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum += i;
}
System.out.println("Сумма = " + sum);
}
}
Вывод:
Сумма = 55
Пример 3. Обратный отсчёт
public class Countdown {
public static void main(String[] args) {
for (int i = 5; i >= 1; i--) {
System.out.println(i + "...");
}
System.out.println("Старт!");
}
}
Вывод:
5...
4...
3...
2...
1...
Старт!
Пример 4. for-each по массиву
public class ForEach {
public static void main(String[] args) {
int[] sensors = {512, 480, 600, 350};
int total = 0;
for (int v : sensors) {
total += v;
}
System.out.println("Среднее: " + (total / sensors.length));
}
}
Вывод:
Среднее: 485
Пример 5. Вложенные циклы (таблица умножения)
public class MultTable {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
System.out.print(i * j + "\t");
}
System.out.println();
}
}
}
Вывод:
1 2 3
2 4 6
3 6 9
Пример 6. Шаг больше 1 — моргание LED через раз
public class BlinkEven {
public static void main(String[] args) {
for (int pin = 2; pin <= 12; pin += 2) {
System.out.println("Моргает LED на пине " + pin);
}
}
}
Вывод:
Моргает LED на пине 2
Моргает LED на пине 4
Моргает LED на пине 6
Моргает LED на пине 8
Моргает LED на пине 10
Моргает LED на пине 12
Подводные камни
Off-by-one. Граничные условия
<и<=— частая причина багов:i <= nпройдёт n раз,i < n— n−1 раз (еслиiстартует с 1).Бесконечный цикл.
for (int i = 0; i < 10; i--)никогда не закончится; следите за знаком шага.Изменение счётчика внутри тела. Менять переменную цикла в теле — плохая практика, делает поведение непредсказуемым.
for-each и индекс. В
for-eachнет доступа к индексу; если нужен индекс — используйте классическийfor.Изменение коллекции внутри for-each. Удаление элементов из
ArrayListвнутриfor-eachвызоветConcurrentModificationException.
См. также
Примечание
Лицензия и источники
Концепция описана на основе официального Java Tutorial от Oracle (https://docs.oracle.com/javase/tutorial/), Oracle Free Documentation License. Перевод, примеры и пояснения — © AlashEd Wiki.