Зарегистрируйтесь, чтобы продолжить обучение

Цикл for-each Java: Массивы

for относится к низкоуровневым циклам. Он требует задания счетчика, правил его изменения и условия остановки. Было бы значительно удобнее обходить элементы коллекции напрямую, без счетчика. Многие языки программирования решают это введением специального вида цикла. В Java тоже есть такой: for-each.

String[] userNames = {"petya", "vasya", "evgeny"};

for (var name : userNames) {
    System.out.println(name);
}
// => "petya"
// => "vasya"
// => "evgeny"

С for этот пример выглядит так:

for (var i = 0; i < userNames.length; i++) {
    var name = userNames[i];
    System.out.println(name);
}

https://replit.com/@hexlet/java-arrays-for-of-example#Main.java

Как видно из примера, код, использующий for-each, получается значительно чище, чем с использованием цикла for. for-each знает о том, как перебирать элементы и знает о том, когда они закончатся.

Этот цикл отлично подходит для задач агрегации:

class MyArrayUtils {
    public static int calculateSum(int[] numbers) {
        // Начальное значение суммы
        var sum = 0;
        for (var number : numbers) {
            sum += number;
        }

        return sum;
    }
}

int[] numbers = {3, 2, -10, 38, 0};
System.out.println(MyArrayUtils.calculateSum(numbers)); // => 33

С помощью for-each можно обходить строку посимвольно. В этом поможет метод toCharArray():

var greeting = "Hello";
for (var symbol : greeting.toCharArray()) {
    System.out.println(symbol);
}
// => 'H'
// => 'e'
// => 'l'
// => 'l'
// => 'o'

Применимость

В большинстве задач, использующих цикл, предпочтительнее for-each . Иногда его бывает недостаточно, и требуется ручное управление обходом. В таких случаях можно возвращаться к использованию for. Например, когда нужно идти не по каждому элементу массива, а через один:

for (var i = 0; i < items.length; i += 2) {
    // какой-то код
}

Иногда нужно обходить массив в обратном порядке. for-each здесь бессилен и снова нужен for:

for (var i = items.length - 1; i >= 0; i--) {
    // какой-то код
}

Другие задачи вообще с массивами напрямую не связаны. К последним относятся ситуации, когда нужно перебирать числа в определенном диапазоне. В этом случае нет массива, по которому можно было бы пройтись с помощью for-each.

for (var i = 5; i < 10; i++) {
    // какой-то код
}

Ну и наконец, встречаются задачи, в которых нужно во время обхода менять исходный массив:

for (var i = 0; i < items.length; i++) {
    items[i] = /* что-то делаем */
}

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
Программирование на Java, Разработка веб-приложений и микросервисов используя Spring Boot, проектирование REST API
10 месяцев
с нуля
Старт 26 декабря

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»