Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Циклы

Цикл повторяет блок кода, пока выполняется условие. Без циклов, чтобы вывести числа от 1 до 100, пришлось бы написать сто одинаковых строк. Одно выполнение тела цикла называется итерацией.

while

Цикл while проверяет условие перед каждой итерацией. Пока оно истинно, тело выполняется снова и снова:

void main() {
    int count = 1;
 
    while (count <= 3) {
        IO.println("Итерация " + count);
        count++;
    }
}

Результат:

Итерация 1
Итерация 2
Итерация 3

Внутри цикла переменная count обязательно меняется. Иначе условие навсегда останется истинным, и получится бесконечный цикл.

do-while

do-while сначала выполняет тело, а потом проверяет условие. Поэтому тело выполнится хотя бы один раз, даже если условие ложно с самого начала:

void main() {
    int attempts = 5;
 
    do {
        IO.println("Попытка " + attempts);
        attempts++;
    } while (attempts < 3);
}

Результат:

Попытка 5

for

Цикл for собирает всё управление в одну строку: начальное значение счётчика, условие и шаг. Это самый частый цикл, когда число повторений известно заранее:

void main() {
    for (int i = 1; i <= 5; i++) {
        IO.print(i + " ");
    }
    IO.println();
}

Результат:

1 2 3 4 5

Сначала выполняется int i = 1, затем перед каждой итерацией проверяется i <= 5, а после итерации выполняется i++. Шаг может быть любым, например i += 2 или i-- для обратного отсчёта.

Накопление результата

Часто цикл не просто выводит значения, а копит результат в переменной, объявленной до цикла:

void main() {
    int sum = 0;
    for (int i = 1; i <= 100; i++) {
        sum += i;
    }
    IO.println(sum);
}

Результат:

5050

for-each

Массив — это набор значений одного типа под одним именем, подробно о нём рассказывает урок о массивах. Перебрать все его элементы удобнее всего циклом for-each: переменная слева от двоеточия по очереди получает каждый элемент:

void main() {
    String[] names = {"Анна", "Олег", "Мария"};
 
    for (String name : names) {
        IO.println("Привет, " + name);
    }
}

Результат:

Привет, Анна
Привет, Олег
Привет, Мария

for-each не даёт индекса элемента. Если индекс нужен, используйте обычный for.

Частая ошибка

Индексы массива начинаются с нуля, поэтому последний элемент имеет индекс length - 1. Условие <= вместо < заставляет цикл выйти за пределы массива:

void main() {
    int[] prices = {10, 20, 30};
 
    for (int i = 0; i <= prices.length; i++) {
        IO.println(prices[i]);
    }
}

Результат:

10
20
30
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

Для обхода массива по индексам пишите i < prices.length.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.