12 Java for-each

  Рет қаралды 26

Обучение программированию с нуля

Обучение программированию с нуля

Күн бұрын

for-each - очень удобный инструмент для прохождения по массиву. Кратко: создаем переменную объекта и записываем в нее значение каждого элемента массива. Потом можем вывести ее или использовать, ну например через дженерик в другой класс для обработки по другой логике - просто огонь!)) 🔥🔥
На странице: javarush.com/g...
есть описание:
For-each - это разновидность цикла for, которая используется, когда нужно обработать все элементы массива или коллекции. “For each” с английского так и переводится - “для каждого”. Собственно, само словосочетание foreach в этом цикле не используется. Его синтаксис следующий:
for (type itVar : array)
{
Блок операторов;
}
Где type - тип итерационной переменной (совпадает с типом данных в массиве!), itVar - её имя, array - массив (тут также может быть другая структура данных, какая-нибудь коллекция, например, ArrayList), то есть объект, по которому выполняется цикл. Как вы видите, счётчик в такой конструкции не применяется, итерационная переменная перебирает элементы массива или коллекции, а не значения индекса.
При выполнении такого цикла, итерационной переменной последовательно присваивается значение каждого элемента массива или коллекции, после чего выполняется указанный блок операторов (или оператор).
Помимо цикла for-each в Java также есть метод forEach(). О нём можно почитать, например, в статье “Хватит писать циклы! Топ-10 лучших методов для работы с коллекциями в Java 8”
Цикл for-each можно применить к массивам и любым классам, которые реализуют интерфейс java.lang.Iterable.
Эквивалентом коду выше будет следующий цикл for:
for (int i=0; i(знак меньше)array.length; i++)
{
Блок операторов;
}
Пример использования Java foreach
Создадим массив из оценок ученика. Затем с помощью for-each распечатаем все оценки, выведем среднюю оценку и найдём максимальную из них.
public class ForEachTest {
//метод, который распечатывает все оценки
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int num : grades) {
System.out.print(num + "|");
}
System.out.println();
}
//метод, в котором выводится средняя оценка
public static double midGrade(int[] numbers) {
int grade = 0;
for (int num : numbers) {
grade = num + grade;
}
return ((double) grade / numbers.length);
}
//метод в котором вычисляется лучшая (максимальная) оценка
public static int bestGrade(int[] numbers) {
int maxGrade = numbers[0];
for (int num : numbers) {
if (num (знак больше) maxGrade) {
maxGrade = num;
}
}
return maxGrade;
}
public static void main(String[] args) {
//массив оценок
int[] grades = {5, 10, 7, 8, 9, 9, 10, 12};
int highest_marks = bestGrade(grades);
System.out.print("All the grades: ");
printAllGrades(grades);
System.out.println("The highest grade is " + highest_marks);
System.out.println("The average grade is " + midGrade(grades));
}
}
Вывод программы:
All the grades: |5|10|7|8|9|9|10|12|
The highest grade is 12
The average grade is 8.75
А теперь давайте посмотрим, как бы выглядел метод распечатывания всех оценок, выполненный с помощью обычного цикла for:
public static void printAllGrades(int[] grades) {
System.out.print("|");
for (int i = 0; i (знак меньше) grades.length; i++) {
System.out.print(grades[i] + "|");
}
System.out.println();
}
Если вызвать этот метод из метода main, мы получим результат:
All the grades: |5|10|7|8|9|9|10|12|
Пример использования цикла for-each с коллекциями
Создадим коллекцию из имён и выведем все имена на экран.
List(String) names = new ArrayList(условные скобки)();
names.add("Snoopy");
names.add("Charlie");
names.add("Linus");
names.add("Shroeder");
names.add("Woodstock");
for(String name : names){
System.out.println(name);
}
Ограничения цикла for-each
Компактная форма for-each считается более читаемой, чем for, и правилом хорошего тона считается использовать именно for-each там, где это можно сделать. Однако for-each - менее универсальная конструкция, чем обычный for. Приведём несколько простых случаев, где воспользоваться for-each не получится вовсе или получится, но с трудом.
Если вы хотите пройти по циклу с конца в начало. То есть прямого for-each аналога следующему коду нет:
for (int i = array.length - 1; i (знак больше)= 0; i--)
{
System.out.println(array[i]);
}
For-each не подходит, если вы хотите внести изменения в массив. Например, не получится организовать сортировку массива, не меняя его элементы местами. Или вот, в следующем коде изменится не элемент массива, а только итерационная переменная:
for (int itVar : array)
{
itVar = itVar++;
}
Если вы ищете элемент в массиве и вам нужно вернуть/передать индекс искомого элемента, лучше воспользоваться обычным циклом for.

Пікірлер
13 Java multidimensional arrays (многомерные массивы)
7:27
Обучение программированию с нуля
Рет қаралды 24
iPhone or Chocolate??
00:16
Hungry FAM
Рет қаралды 43 МЛН
Пришёл к другу на ночёвку 😂
01:00
Cadrol&Fatich
Рет қаралды 11 МЛН
19 Java ключевое слово this
8:51
Обучение программированию с нуля
Рет қаралды 88
21 Java static #coding #codewithme #fullstackdeveloper #java #python #php #css #ai
8:24
Обучение программированию с нуля
Рет қаралды 44
SENIOR on JUNIOR Javascript Developer interview
26:35
BELOV
Рет қаралды 290 М.