Статьи

Полный курс по языку Java — от установки JDK до многопоточности и HTTP-запросов

Циклы

Страница 10 из 30 · 2026-10-25 · 3 мин чтения

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 (...); делает тело пустым.