Java за неделю. Вводный курс - страница 19
5.1.2 Специальная форма оператора for
Специальная форма оператора for позволяет перебирать непосредственно элементы массива, не используя индексы. Конструкция оператора for в этом случае имеет вид:
for (тип переменная: массив) {
// Блок команд
}
Например, цикл для перебора значений массива userAge имеет вид:
for (int age: userAge) {
System.out.println (age);
}
В этом примере рабочая переменная age поочередно принимает значения всех элементов массива userAge. В теле цикла текущее значение переменной age выводится на печать. Таким образом, мы выводим на печать содержимое массива userAge.
При помощи специальной формы оператора for мы можем только читать текущие значения элементов массива. Для инициализации или модификации элементов массива следует использовать обычный цикл, в котором происходит перебор индексов массива в явном виде.
В примере из листинга 5.1 в первом цикле элементам массива even [] присваиваются четные значения от 2 до 20. Далее применяется специальная форма цикла for для вывода значений всех элементов массива на печать.
Листинг 5.1 Перебор элементов массива
public class Listing5_1 {
public static void main (String [] args) {
int [] even = new int [10];
// Инициализация массива
for (int i=0;i <10;i++) {
even [i] = i*2+2;
}
// Вывод значений элементов массива
for (int data: even) {
System.out.println (data);
}
}
}
5.1.3 Присваивание массивов
Переменные массивов относятся к переменным ссылочного типа. Это значит, что в переменной массива хранится ссылка на область памяти, в которой хранится массив. Следовательно, этой переменной можно присвоить ссылку на другой массив. Массивы должны быть одного и того же типа и размерности, но вот размер не обязательно должен совпадать, потому что переменной массива присваиваются не новые данные, а новая ссылка на них.
Операция присвоения массивов проста, но может привести к неочевидным последствиям. Рассмотрим простой пример присвоения:
int [] first = {10,20,30,40};
int [] second = new int [6];
second = first;
first [2] = 50;
В первой строке мы создаем массив из четырех элементов. Во второй строке объявляем массив из шести элементов. В третьей строке переменной второго массива присваиваем ссылку на первый массив. После выполнения команды обе переменных ссылаются на один и тот же массив. Как вы думаете, какое значение будет у элемента second [2] после выполнения команды first [2] = 50? Правильно, тоже 50. Ведь это одна и та же ячейка памяти, на которую ссылаются разные переменные массива.
5.2 Двумерные массивы
Двумерный массив проще всего представить в виде таблицы, состоящей из строк и столбцов. Каждый элемент двумерного массива однозначно определяется двумя индексами – номером строки и номером столбца, на пересечении которых находится элемент. К сожалению, этот образ хоть и нагляден, но не совсем корректен. Дело в том, что строки в этой «таблице» не обязательно должны иметь одинаковую длину.
Более правильно двумерный массив можно представить как одномерный «внешний» массив, элементами которого являются ссылки на одномерные «вложенные» массивы. Первый индекс определяет ссылку на вложенный массив. Второй индекс определяет элемент вложенного массива. В таком случае более очевидно, что вложенные массивы могут иметь различный размер.
Строго говоря, многомерные массивы с вложенными массивами одинакового размера являются лишь частным случаем общего типа