Циклы в Java

for — когда известно число итераций

for (инициализация; условие; шаг) {
    // тело
}
// Считаем от 0 до 4
for (int i = 0; i < 5; i++) {
    System.out.println(i);
}
// Вывод: 0 1 2 3 4

// Считаем от 10 до 1
for (int i = 10; i >= 1; i--) {
    System.out.println(i);
}

// Шаг 2
for (int i = 0; i <= 10; i += 2) {
    System.out.println(i); // 0 2 4 6 8 10
}

while — когда условие заранее неизвестно

while (условие) {
    // тело — выполняется ПОКА условие true
}
int n = 1;
while (n <= 5) {
    System.out.println(n);
    n++;
}
// Вывод: 1 2 3 4 5

// Если условие сразу false — тело не выполнится ни разу
int x = 10;
while (x < 0) {
    System.out.println("не выполнится");
}

do-while — тело выполняется хотя бы раз

do {
    // тело
} while (условие);
int n = 1;
do {
    System.out.println(n);
    n++;
} while (n <= 5);
// Вывод: 1 2 3 4 5

// Даже если условие false с начала:
int x = 100;
do {
    System.out.println("выполнится один раз");
} while (x < 0);

for-each — перебор коллекций и массивов

for (тип элемент : коллекция) {
    // тело
}
int[] numbers = {10, 20, 30, 40};
for (int num : numbers) {
    System.out.println(num);
}
// Вывод: 10 20 30 40

String[] fruits = {"яблоко", "груша", "слива"};
for (String fruit : fruits) {
    System.out.println(fruit);
}

Ограничения for-each:
- Нет доступа к индексу
- Нельзя изменять элементы массива примитивов


break — выход из цикла

for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break;        // выходим при i=5
    }
    System.out.println(i);
}
// Вывод: 0 1 2 3 4

// Поиск первого четного
int[] arr = {3, 7, 4, 9, 2};
int found = -1;
for (int x : arr) {
    if (x % 2 == 0) {
        found = x;
        break;        // нашли, выходим
    }
}
System.out.println(found); // 4

continue — пропустить итерацию

for (int i = 0; i < 10; i++) {
    if (i % 2 == 0) {
        continue;     // пропускаем чётные
    }
    System.out.println(i);
}
// Вывод: 1 3 5 7 9

Вложенные циклы

// Таблица умножения
for (int i = 1; i <= 3; i++) {
    for (int j = 1; j <= 3; j++) {
        System.out.print(i * j + " ");
    }
    System.out.println();
}
// 1 2 3
// 2 4 6
// 3 6 9
// Перебор 2D массива
int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
    for (int j = 0; j < matrix[i].length; j++) {
        System.out.print(matrix[i][j] + " ");
    }
    System.out.println();
}

break с меткой (labeled break)

// Выход из внешнего цикла
outer:
for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 5; j++) {
        if (i == 2 && j == 2) {
            break outer;  // выходим ИЗ ОБОИХ
        }
        System.out.print(i + "" + j + " ");
    }
}
// Остановится как только i=2, j=2

Типичные задачи на циклы

Сумма элементов массива

int[] arr = {1, 2, 3, 4, 5};
int sum = 0;
for (int x : arr) {
    sum += x;
}
System.out.println(sum); // 15

Максимальный элемент

int[] arr = {3, 7, 1, 9, 4};
int max = arr[0];
for (int x : arr) {
    if (x > max) max = x;
}
System.out.println(max); // 9

Подсчёт элементов по условию

int[] arr = {1, 2, 3, 4, 5, 6};
int count = 0;
for (int x : arr) {
    if (x % 2 == 0) count++;
}
System.out.println(count); // 3 (чётных)

Поиск элемента

int[] arr = {5, 3, 8, 1};
int target = 8;
int index = -1;
for (int i = 0; i < arr.length; i++) {
    if (arr[i] == target) {
        index = i;
        break;
    }
}
// index = 2

Переворот массива

int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length / 2; i++) {
    int tmp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = tmp;
}
// {5, 4, 3, 2, 1}

Сравнение циклов

for — известно кол-во итераций

while — условие проверяется до входа

do-while — гарантирован 1 запуск

for-each — для массивов и коллекций, нет индекса

← Меню