Загрузка...

for-each в Java

Сохраните три целых числа в массиве с именем slots: 2, затем 4, затем 6. Напишите for (int n : slots) и внутри фигурных скобок напечатайте n. На экране должны появиться три строки: 2, затем 4, затем 6. На этой странице вы не пишете счётчик индекса. Каждый проход передаёт имени n следующее значение из массива. Именно такой обход эта страница и учит.

Одно имя для каждого значения в массиве

Создайте небольшой файл программы с именем Pack.java. public class в первой строке должен совпадать с именем файла: public class Pack. Не оставляйте в этом файле старое имя класса Skip или Pulse; компилятор ждёт, что имя класса и имя файла совпадут.
Внутри main сначала сохраните массив:
int[] slots = {2, 4, 6};
Эта строка ничего не печатает. Она только держит три целых числа под именем slots. Затем цикл for-each:
for (int n : slots) {
System.out.println(n);
}
Слово for по-прежнему пишется строчными буквами. В круглых скобках стоят три части с двоеточием посередине: тип int, имя n для одного элемента, затем двоеточие, затем имя массива slots. Это двоеточие — не метка case и не разделитель пути. Оно означает «каждое значение из slots попадает в n.» Фигурные скобки держат тело. System.out.println(n); пишет текущее значение без кавычек вокруг n. Сохраните файл перед компиляцией.

Программа, которая печатает 2, затем 4, затем 6

Это версия, которую вы компилируете первой.

обход массива int

java
public class Pack {
    public static void main(String[] args) {
        int[] slots = {2, 4, 6};
        for (int n : slots) {
            System.out.println(n);
        }
    }
}

Из папки, где лежит Pack.java, выполните javac Pack.java. Когда круглые скобки, фигурные скобки и двоеточия совпадают, javac не пишет ни одной своей строки. Затем выполните java Pack — не java Pack.java. Окончание .java у второй команды уберите. Те же две команды работают и в Windows, и в macOS; эта страница не требует другого написания оболочки ни для одной из систем. Программа должна напечатать три строки и остановиться: 2, затем 4, затем 6. Она не ждёт, пока вы что‑то наберёте. Если терминал ждёт ввода с клавиатуры, в файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте массив вместе с for-each выше. Из‑за неверной строки на экране новый JDK ставить не нужно.

Пройдите один полный запуск по порядку. slots хранит 2, затем 4, затем 6. Первый проход ставит n равным 2, и println пишет 2. Второй проход ставит n равным 4 и пишет 4. Третий проход ставит n равным 6 и пишет 6. Затем значений больше нет, и цикл заканчивается. На этой странице вы не писали int i = 0 и не писали i < slots.length. Заголовок for-each просит Java посетить каждое сохранённое значение один раз. Имя n «новое» на каждом проходе только в том смысле, что оно держит следующий элемент; вы всё равно объявляете его один раз в заголовке как int n.

Обход массива String тем же способом

Измените сохранённый массив и тип элемента так, чтобы каждое значение было коротким словом:
String[] tags = {"red", "blue"};
for (String t : tags) {
System.out.println(t);
}
Теперь экран должен показать две строки: red, затем blue. Двоеточие по-прежнему стоит между типом элемента и именем массива. Тело по-прежнему печатает имя, которое держит один элемент.

обход массива String

java
public class Pack {
    public static void main(String[] args) {
        String[] tags = {"red", "blue"};
        for (String t : tags) {
            System.out.println(t);
        }
    }
}

Скомпилируйте и запустите снова: javac Pack.java, затем java Pack. Вы должны увидеть две строки. Вы заменили массив int на массив String и подогнали тип имени элемента под String. Когда увидите red и blue, можете вернуть демо с int. Обе версии — корректный Java. Они учат одну и ту же форму for-each с разными видами элементов.

Прочитайте запуск со String ещё раз. tags хранит red, затем blue. Первый проход ставит t равным red и печатает его. Второй проход ставит t равным blue и печатает его. Затем цикл заканчивается. Кавычки в литерале массива помечают текст, сохранённый в массиве. println(t) без лишних кавычек вокруг t пишет эти сохранённые буквы на экран.

Правила, которые держат for-each ясным

В круглых скобках должны стоять тип, имя, двоеточие и имя массива — именно в таком порядке. Написание for (int n slots) без двоеточия заставляет javac выдать ошибку. Тип элемента должен подходить массиву: int с массивом int, String с массивом String. Поставить int n рядом с String[] — не та форма, которую компилирует этот урок. Фигурные скобки по-прежнему держат тело, когда в теле одна или несколько строк.

for-each — это не считающий for со страницы Beat и не break со страницы Skip. Считающий for писал старт, проверку и шаг со счётчиком. for-each обходит значения, уже сохранённые в массиве. break рано завершает цикл; первое демо этой страницы печатает каждое значение. Не оставляйте в том же main демо break со страницы Skip или while со страницы Pulse и не удивляйтесь, почему экран показывает 1 и 2 вместо 2, 4, 6. В main этой сессии должны быть только массив и for-each.

Частая путаница — напечатать сам синтаксис: System.out.println("for (int n : slots)");. Это пишет символы заголовка. Массив при этом не обходится. Другая путаница — System.out.println("n"); с кавычками: на каждом проходе печатается буква n вместо 2, 4 и 6. Оставляйте println(n) без кавычек, когда на экране нужно значение элемента.

Если в массиве нет элементов — например int[] slots = {}; — тело ни разу не выполняется, и экран остаётся пустым. Это всё ещё корректный for-each; демо этого урока держат хотя бы два значения, чтобы вы видели напечатанные строки. Когда позже на экране понадобится номер индекса, вернётся считающий for; for-each нужен, чтобы посещать значения без управления этим индексом самому. Изменение значения внутри цикла через n = 9; на этой начальной форме не переписывает ячейку массива — считайте n значением, которое вы читаете для печати, а не инструментом для правки slots.

Что вы уже умеете

Вы можете сохранить массив, написать for (Type name : arrayName) и один раз напечатать каждое значение. Совпадение типа элемента с массивом держит цикл компилируемым. Следующая страница — methods: там вы группируете строки под именем, которое можно вызвать из main.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
6
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху