Улучшенная версия цикла for может применяться для обработки многомерных массивов (multidimensional array).
Напоминаю, что в языке Java многомерные массивы представляют собой массивы массивов (arrays of arrays) (например двухмерный массив — это массив из одномерных массивов). Это важно при циклической обработке многомерного массива, так как в каждом проходе цикла извлекается следующий массив, а не отдельный элемент. Более того, тип переменной цикла в цикле for должен быть совместим с типом получаемого массива. Например, в случае двухмерного массива переменная цикла должна быть ссылкой на одномерный массив. Вообще при использовании цикла for в стиле for-each для обработки массива с N измерениями получаемые объекты должны быть массивами с N-1 измерениями. Для того чтобы лучше понять смысл этого рассмотрим программу, приведенную в листинге 4.4. В ней применены вложенные циклы for для получения всех элементов двухмерного массива в порядке их следования в строках
Листинг 4.4. Использование цикла for в стиле for-each для обработки двухмерного массива
class ForEach3 {
public static void main(String args[]) {
int sum = 0;
int nums[][] = new int[3][5];
// give nums some values
for(int i = 0; i < 3; i++)
for(int j=0; j < 5; j++)
nums[i][j] = (i+1)*(j+1);
// use for-each for to display and sum the values
for(int x[] : nums) {
for(int y : x) {
System.out.println("Value is: " + y);
sum += y;
}
}
System.out.println("Summation: " + sum);
}
}
Далее приведен вывод результатов работы программы из листинга 4.4:
Value is: 1
Value is: 2
Value is: 3
Value is: 4
Value is: 5
Value is: 2
Value is: 4
Value is: 6
Value is: 8
Value is: 10
Value is: 3
Value is: 6
Value is: 9
Value is: 12
Value is: 15
Summation: 90
В листинге 4.4 обратите особое внимание на следующую строку:
for(int x[] : nums) {
Посмотрите, как определена переменная цикла, х. Это ссылка на одномерный массив целых чисел. Подобное объявление необходимо, так как в каждом проходе цикла for извлекается следующий массив из двухмерного массива nums, начиная с массива заданного как nums[0]. Внутренний цикл for затем просматривает каждый из этих массивов, отображая значения каждого элемента.
|