for
public class ForLoop { public static void main(String[] args) { for (int i = 1; i <= 5; i++) { System.out.println("Итерация " + i); } }}Три части: инициализация, условие продолжения, шаг. Переменная i видна только внутри цикла.
Сумма чисел от 1 до 100:
public class Sum100 { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 100; i++) { sum += i; } System.out.println(sum); }}Результат: 5050.
while
Проверка условия выполняется до тела цикла:
public class WhileLoop { public static void main(String[] args) { int n = 12345; int digits = 0; while (n > 0) { n /= 10; digits++; } System.out.println("Цифр: " + digits); }}do-while
Тело выполняется минимум один раз, условие проверяется после:
import java.util.Scanner;public class DoWhileLoop { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int number; do { System.out.print("Введите положительное число: "); number = scanner.nextInt(); } while (number <= 0); System.out.println("Принято: " + number); }}for-each
Перебор массивов и коллекций без индекса:
public class ForEachLoop { public static void main(String[] args) { String[] fruits = {"яблоко", "груша", "слива"}; for (String fruit : fruits) { System.out.println(fruit); } }}Изменить элементы массива через переменную fruit нельзя: она содержит копию значения или ссылки.
break и continue
break прерывает цикл, continue переходит к следующей итерации:
public class BreakContinue { public static void main(String[] args) { for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { continue; } if (i > 7) { break; } System.out.println(i); } }}Вывод: 1, 3, 5, 7.
Вложенные циклы
Таблица умножения:
public class MultiplicationTable { public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= 9; j++) { System.out.printf("%4d", i * j); } System.out.println(); } }}Треугольник из звездочек:
public class Triangle { public static void main(String[] args) { int height = 5; for (int row = 1; row <= height; row++) { System.out.println("*".repeat(row)); } }}Метки
Метка позволяет выйти сразу из внешнего цикла:
public class Labels { public static void main(String[] args) { outer: for (int i = 1; i <= 5; i++) { for (int j = 1; j <= 5; j++) { if (i * j == 12) { System.out.println("Найдено: " + i + " * " + j); break outer; } } } }}Используйте метки редко: чаще читаемее вынести цикл в отдельный метод и использовать return.
Бесконечный цикл
public class Infinite { public static void main(String[] args) { int counter = 0; while (true) { counter++; if (counter == 3) { break; } } System.out.println(counter); }}Типичные ошибки
- Забытый шаг цикла приводит к зависанию.
- Ошибка на единицу:
<вместо<=. - Изменение коллекции во время
for-eachвызываетConcurrentModificationException. - Точка с запятой после
for (...);делает тело пустым.
