В языке программирования Java цикл for-each используется для циклической обработки объектов
коллекции, такой как массив, в строгой последовательности, от начала
к концу. Благодаря удобному способу обработки, предложенному циклом for-each, этот вид цикла
быстро превратился в средство, необходимое
программистам. Так же язык программирования Java включает функциональные возможности цикла for-each, усовершенствуя
оператор цикла for. Преимущество такого подхода
заключается в том, что не требуется нового
ключевого слова и не нарушается работоспособность разработанного ранее
кода. Цикл for в стиле for-each (т. е.
наделенный функциональными возможностями цикла for-each) иногда называют улучшенным
циклом for (enhanced for loop).
Описание цикла for-each Общая форма записи цикла for в стиле for-each приведена в следующей строке:
foritype
itr-var : iterableObj) statement-block
Выше приведенном примере type— тип, a itr-var— имя переменной цикла (iteration variable), которая будет получать
элементы, содержащиеся в iterabieObj, последовательно один за другим от начала к концу.
Объект, на который ссылается переменная iterabieObj, должен быть массивом или
объектом, реализующим новый интерфейс Iterable. В любом случае тип type должен совпадать (или быть
совместимым) с типом элементов, извлекаемых из объекта iterableObj. Таким образом, в случае
циклической обработки массива type должен быть совместим с базовым типом массива. В
каждом проходе тела цикла извлекается очередной элемент объекта iterabieObj и запоминается в переменной itr-var. Цикл выполняется до тех пор,
пока не будут извлечены все элементы.
В приведенном ниже примере используется
традиционный цикл for для подсчета
суммы значений, хранящихся в элементах массива:
int
nums[] = {1, 2,
3, 4, 5, 6,
7, 8,
9, 10 }; int sum = 0;
for
(int i=0, i < 10; i++) sum +=nums{};
Цикл for стиля for-each автоматизирует
приведенный в предыдущем примере цикл. А
именно, он устраняет необходимость устанавливать счетчик цикла, задавая начальное и конечное значения, и
вручную индексировать массив. Вместо
этого он автоматически проходит весь массив, получая поочередно каждый элемент, начиная с первого и
заканчивая последним. Далее приведен
переписанный предыдущий пример с использованием цикла for в стиле for-each:
int
nums[] = {1, 2,
3, 4, 5, б,
7, 8,
9, 10 };
int
sum = 0;
for(int
x: nums) sum += x;
B каждом проходе тела цикла
переменная х получает значение из
следующего элемента массива nums. Таким образом, во время
первого прохода переменная цикла х
содержит значение 1, во время второго — значение 2 и т. д. При этом не только упрощается синтаксис, но и устраняются ошибки
выхода за границы диапазона (boundary errors).
Например.
class ForEach {
public static void main(String args[]) {
int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,
10 };
int sum = 0;
for(int x : nums) {
System.out.println("Value is: "
+ x);
sum += x;
}
System.out.println("Summation: "
+ sum);
}
}
Результатом выше приведенного
примера будет:
Value
is: 1 Value
is: 2 Value
is: 3 Value
is: 4 Value
is: 5 Value
is: 6 Value
is: 7 Value
is: 8 Value
is: 9 Value is: 10 Summation: 55
Как показывает вывод программы,
цикл for в стиле for-each автоматически обрабатывает массив в цикле от наименьшего значения
индекса до наибольшего его значения.
Несмотря на то, что цикл for в стиле for-each повторяется до
тех пор, пока не обработаны все элементы массива, можно прервать его с помощью
оператора break.
|