Переменные, относящиеся к одному массиву, называются элементами этого мас- сива. Чтобы однозначно идентифицировать элемент массива, необходимо знать имя массива и позицию (размещение) элемента в массиве. Позиция элементов в массиве определяется с помощью целочисленных индексов. Количество ин- дексов, необходимых для идентификации элемента массива, называется размер- ностью массива. Одномерный массив — это такой массив, в котором идентифи- кация элементов осуществляется с помощью одного индекса.
Для объявления одномерного массива необходимо задать тип, к которому от- носятся элементы массива, название массива, а также количество элементов, входящих в массив. Синтаксис объявления одномерного массива имеет вид: тип[] имя=new тип[размер];
Вначале указывается тип элементов массива. Обращаем внимание, что для мас- сива после идентификатора типа ставятся пустые квадратные скобки. Далее сле- дует имя массива, оператор присваивания, инструкция динамического выделения памяти new, снова тип элементов массива и в квадратных скобках размер массива
Создание одномерного массива81
(количество элементов в массиве). Например, командой int nums=new int[20]
объявляется целочисленный массив nums из 20 элементов.
Строго говоря, представленная здесь команда объявления массива является симбиозом двух команд: команды int[] nums объявления переменной nums типа
«целочисленный массив» и команды nums=new int[20] выделения памяти под массив и присваивания ссылки на этот массив переменной nums. Другими слова- ми, процесс объявления массива можно выполнить двумя командами:
int[] nums; nums=new int[20];
Допускается указывать квадратные скобки либо после имени типа массива, либо после имени массива. Например, вместо команды int[] nums можно ис- пользовать команду int nums[].
Обращение к элементу одномерного массива осуществляется через имя массива с указанием в квадратных скобках индекса элемента. Индексация элементов массива начинается с нуля. Таким образом, ссылка на первый элемент массива nums будет иметь вид nums[0]. Если в массиве 20 элементов, то последний эле- мент массива имеет индекс 19, то есть nums[19].
Длину массива можно узнать с помощью свойства length. Это такая переменная, которая создается при объявлении массива, и ее значением является количество элементов массива. Поскольку для каждого массива создается своя переменная length, обращение к таким переменным осуществляется с одновременным ука- занием имени массива. В частности, сначала указывается имя массива, а затем, через точку, имя переменной length. Например, чтобы в программе узнать значе- ние длины массива nums, можно воспользоваться инструкцией nums.length. Ссыл- ка на последний элемент массива может быть записана как nums[nums.length-1], поскольку индекс последнего элемента на единицу меньше длины массива.
Здесь уместно будет обратить внимание читателей, знакомых с языком про- граммирования С++, что в Java, в отличие от С++, выполняется автоматическая проверка факта выхода за пределы массива. Поэтому если в программном коде по ошибке выполняется обращение к несуществующему элементу массива, про- грамма не скомпилируется.
При объявлении массива для него выделяется память. В Java элементы масси- ва автоматически инициализируются с «нулевыми» значениями — выделенные ячейки обнуляются, а значения этих обнуленных ячеек интерпретируются в за- висимости от типа массива. Тем не менее на такую автоматическую инициализа- цию полагаться не стоит. Разумно инициализировать элементы массива в явном виде. Для этого используют инструкцию цикла или задают список значений элементов при объявлении массива.
При инициализации массива списком значений при объявлении переменной массива после нее указывается (через оператор присваивания) заключенный в фигурные скобки список значений. Например:
int[] data={3,8,1,7};
Если в квадратных скобках размер массива не указан, он определяется автома- тически в соответствии с количеством элементов в списке значений. В данном случае создается целочисленный массив data из четырех элементов со значения- ми data[0]=3, data[1]=8, data[2]=1 и data[3]=7. Того же результата можно добить- ся, воспользовавшись такими командами:
int[] data;
data=new int[]{3,8,1,7};
Первой командой int[] data объявляется переменная массива. Командой new int[]{3,8,1,7} создается массив из четырех целых чисел, а ссылка на этот мас- сив присваивается в качестве значения переменной data командой data=new int[]
{3,8,1,7}.
Пример объявления, инициализации и использования массивов приведен в ли- стинге 3.1.
Листинг 3.1.Объявление и инициализация одномерного массива
class MyArray{
public static void main(String[] args){
// Индексная переменная и размер массива: int i,n;
// Объявление второго массива: int[] nums=new int[n];
// Заполнение второго массива: for(i=0;i<n;i++){ nums[i]=2*data[i]-3;
System.out.println("nums["+i+"]="+nums[i]);}
}
}
В программе объявляется и инициализируется массив data из четырех элемен- тов. Длина массива, возвращаемая инструкцией data.length, присваивается в ка- честве значения целочисленной переменной n (команда n=data.length). Далее командой int[] nums=new int[n] объявляется целочисленный массив nums. Коли- чество элементов в этом массиве определяется значением переменной n, поэто- му совпадает с размером массива data. Заполнение массива nums выполняется с помощью инструкции цикла. Значения элементов массива nums заполняются на основе значений элементов массива data (командой nums[i]=2*data[i]-3). Вы- численные значения выводятся на экран командой System.out.println("nums["+i
+"]="+nums[i]).
В результате выполнения программы получаем:
nums[0]=3 nums[1]=13 nums[2]=-1 nums[3]=11
Еще раз обращаем внимание читателя на то, что индексация элементов массива начинается с нуля. Поэтому в инструкции цикла индексная переменная i ини- циализируется с начальным нулевым значением, а в проверяемом условии (i<n) использован оператор строгого неравенства.
Немаловажно и то обстоятельство, что при создании массива nums его размер определяется с помощью переменной n, значение которой вычисляется в про- цессе выполнения программы. Такой способ определения размера массива воз- можен исключительно благодаря тому, что массивы в Java динамические.