Привет, Хаброжители! Данная книга предназначена для начинающих.  Вот уже многие годы язык Java входит в число самых популярных и востребованных. Он красивый, эффектный и, самое главное, очень производительный. Но, к сожалению, не самый простой. Именно поэтому спрос на Java-программистов неизменно высок. Язык Java — это бриллиант, который украсит багаж знаний любого программиста. А учить Java, как, я надеюсь, предстоит убедиться читателям этой книги, не только полезно, но и интересно. В основу книги положены курсы лекций, в разное время прочитанные мной для магистров физического факультета Киевского национального университета им. Тараса Шевченко, бакалавров медико-инженерного факультета Национального технического университета Украины «Киевский политехнический институт» и слушателей различных курсов по программированию. Материал книги и способ изложения адаптированы для всех, кто желает изучать Java не только в учебных заведениях, но и самостоятельно. Поэтому книга может использоваться и как самоучитель. Под массивом подразумевают набор однотипных значений (переменных), к которым можно обращаться по общему имени. Именно массивам посвящена эта глава. Переменные, относящиеся к одному массиву, называются элементами этого массива. Чтобы однозначно идентифицировать элемент массива, необходимо знать имя массива и позицию (размещение) элемента в массиве. Позиция элементов в массиве определяется с помощью целочисленных индексов. Количество индексов, необходимых для идентификации элемента массива, называется размерностью массива. Одномерный массив — это такой массив, в котором идентификация элементов осуществляется с помощью одного индекса. Одномерный массив удобно себе представлять в виде упорядоченной цепочки или последовательности переменных (одного типа). Для объявления одномерного массива необходимо задать тип, к которому относятся элементы массива, название массива, а также количество элементов, входящих в массив. Синтаксис объявления одномерного массива такой: Вначале указывается тип элементов массива, а после идентификатора типа следуют пустые квадратные скобки. Далее указывается имя массива, оператор присваивания, инструкция (оператор) new, снова тип элементов массива и в квадратных скобках размер массива (количество элементов в массиве). Например, командой int nums=new int[20] объявляется целочисленный массив nums из 20 элементов. Строго говоря, представленная здесь команда объявления массива является симбиозом двух команд: команды int[] nums объявления переменной nums типа «целочисленный массив» (переменная массива) и инструкции new int[20], которой, собственно, и создается массив. Данная инструкция присваивается значением переменной nums, и в результате ссылки на массив записывается в переменную nums. Другими словами, процесс создания массива можно выполнить двумя командами: Причем эти команды могут быть разнесены в программном коде — то есть мы можем объявить переменную массива и лишь затем, в другом месте кода, создать массив (и записать ссылку на этот массив в переменную массива). В случаях, когда не возникает недоразумений, мы будем переменную массива отождествлять с массивом. При объявлении переменной массива допускается указывать квадратные скобки либо после идентификатора типа, либо после имени массива. Например, вместо команды int[] nums можно использовать команду int nums[]. Обращение к элементу одномерного массива осуществляется через имя массива с указанием в квадратных скобках индекса элемента. Индексация элементов массива начинается с нуля. Таким образом, ссылка на первый элемент массива nums будет иметь вид nums[0]. Если в массиве 20 элементов, то последний элемент массива имеет индекс 19, то есть инструкция обращения к элементу выглядит как nums[19]. Длину массива можно узнать с помощью свойства length: указывается имя массива и, через точку, свойство length. Например, чтобы узнать длину массива nums, можно воспользоваться инструкцией nums.length. Тогда ссылка на последний элемент массива может быть записана как nums[nums.length-1]. При объявлении массива для него выделяется память. В Java элементы массива автоматически инициализируются с нулевыми значениями — выделенные ячейки обнуляются, а значения этих обнуленных ячеек интерпретируются в зависимости от типа массива. Но на такую автоматическую инициализацию полагаться не стоит. Разумно инициализировать элементы массива в явном виде. Для этого используют оператор цикла или задают список значений элементов при объявлении массива. Для инициализации массива списком значений при объявлении переменной массива после нее указывается (через оператор присваивания) заключенный в фигурные скобки список значений. Например: Здесь объявляется переменная data для целочисленного массива, создается массив, и ссылка на него записывается в эту переменную. Размер массива и значения элементов определяются автоматически в соответствии с количеством элементов в списке значений. В данном случае создается целочисленный массив из четырех элементов со значениями элементов 3, 8, 1 и 7. Того же результата можно добиться, воспользовавшись, например, следующими командами: Первой командой int[] data объявляется переменная массива. Инструкцией new int[]{3,8,1,7} создается массив из четырех целых чисел, а ссылка на этот массив присваивается переменной data (имеется в виду команда data=new int[]{3,8,1,7}).
Пример объявления, инициализации и использования массивов приведен в листинге 3.1. В программе объявляется и инициализируется массив data из четырех элементов. Длина массива вычисляется инструкцией data.length. Это значение записывается в целочисленную переменную n (команда n=data.length). Далее командой int[] nums=new int[n] объявляется еще один целочисленный массив nums. Количество элементов в этом массиве определяется значением переменной n, поэтому совпадает с размером массива data. Заполнение массива nums выполняется с помощью оператора цикла. Значения элементов массива nums вычисляются на основе значений элементов массива data (команда nums[i]=2*data[i]-3). Для отображения значений элементов массива nums использована команда System.out.println("nums["+i+"]="+nums[i]). Ниже показано, как выглядит результат выполнения программы:
Результат выполнения программы (из листинга 3.1) Еще раз отметим, что индексация элементов массива начинается с нуля. Поэтому в операторе цикла индексная переменная i инициализируется с начальным нулевым значением, а в проверяемом условии i<nums.length использован оператор строгого неравенства.
Немаловажно и то обстоятельство, что при создании массива nums его размер определяется с помощью переменной n, значение которой вычисляется в процессе выполнения программы. Размерность массива может быть больше единицы. Но на практике массивы размерности выше второй используют редко. Далее рассмотрим способы объявления, инициализации и использования двумерных массивов, в которых доступ к элементу массива осуществляется с помощью двух индексов. Если представлять двумерный массив как таблицу, то первый индекс элемента определяет строку, в которой находится элемент, а второй индекс определяет столбец, в котором находится элемент. Создаются двумерные массивы так же просто, как и одномерные. Но при объявлении переменной для двумерного массива после идентификатора типа указываются две пары пустых квадратных скобок, а в инструкции создания двумерного массива — в отдельных квадратных скобках — указывается размер по каждому из индексов (количество строк и столбцов в массиве). Синтаксис объявления двумерного массива выглядит так: Как и в случае одномерного массива, данная команда может быть разбита на две: Первой командой объявляется переменная для двумерного массива. Второй командой создается собственно двумерный массив с указанными размерами, и ссылка на этот массив присваивается в качестве значения переменной массива. Например, командой double[][] data=new double[3][4] создается двумерный массив с элементами типа double. В массиве 3 строки и 4 столбца, а ссылка на массив записывается в переменную data. К тому же результату приведет выполнение следующих команд: Обращение к элементам двумерного массива выполняется в следующем формате: указывается имя массива, в квадратных скобках — первый индекс элемента, в других квадратных скобках — второй индекс элемента массива. Индексация по всем размерностям начинается с нуля. Например, ссылка data[0][3] является обращением к элементу массива data с индексами 0 и 3, и это элемент в первой строке и в четвертом столбце. Для инициализации двумерного массива используют вложенные операторы цикла или список, состоящий из списков значений. Каждый такой внутренний список определяет значения элементов массива в строке. Ниже приведены примеры инициализации двумерного массива с помощью списка: Первой командой создается и инициализируется двумерный массив data размером 2 на 3 (две строки и три столбца). Количество строк определяется количеством элементов во внешнем списке. Таких элементов два — это списки {0.1,0.2,0.3} и {0.4,0.5,0.6}. В каждом из этих списков по три элемента. Отсюда и получается массив размерами 2 на 3. Список {0.1,0.2,0.3} определяет значения элементов в первой строке, список {0.4,0.5,0.6} определяет значения элементов во второй строке. Например, элемент data[0][0] получает значение 0.1, элемент data[0][2] — значение 0.3, элемент data[1][0] — значение 0.4, а элемент data[1][2] — значение 0.6. Второй командой создается целочисленный массив nums, который состоит из двух строк (поскольку внутри присваиваемого списка два элемента — списки {1,2,3} и {4,5}). Однако в первой строке созданного массива содержится три элемента (поскольку в списке {1,2,3} три значения), а во второй строке массива — два элемента (поскольку в списке {4,5} два значения). В созданном массиве элемент nums[0][0] имеет значение 1, элемент nums[0][1] — значение 2, элемент nums[0][2] — значение 3, элемент nums[1][0] — значение 4, а элемент nums[1][1] — значение 5. В листинге 3.2 приведен пример программы, в которой создается двумерный массив, заполняемый с помощью вложенных операторов цикла. Командой int[][] nums=new int[n-1][n] создается целочисленный массив nums, в котором n-1 строк и n столбцов. Переменной n предварительно присвоено значение 3. Заполняется массив с помощью вложенных операторов цикла. Значение элементу массива (при заданных индексах i и j) присваивается командой nums[i][j]=val++. Здесь элементу nums[i][j] присваивается текущее значение переменной val, а сразу после этого значение переменной val увеличивается на единицу. После вычисления значения элемента оно отображается в области вывода. В результате выполнения программы получаем:
Результат выполнения программы (из листинга 3.2) В листинге 3.3 приведен код программы, в которой создается двумерный массив со строками разной длины. Командой int[][] nums=new int[4][] создается двумерный целочисленный массив nums. Этот массив состоит из четырех строк. Однако размер строк не указан — вторая пара квадратных скобок в конце команды пуста. Точнее, строк еще нет. Их нужно создать. Строки создаются в операторе цикла. В этом операторе цикла индексная переменная i пробегает значения от 0 до nums.length-1 включительно. Командой nums[i]=new int[i+1] создается строка двумерного массива с индексом i. Такая строка содержит i+1 элемент. В результате мы получаем двумерный массив треугольного вида: в первой строке массива один элемент, во второй — два элемента, и так далее, вплоть до четвертой строки массива.
Заполняется созданный массив с помощью вложенных операторов цикла. Индексная переменная i во внешнем операторе цикла принимает значения от 0 до nums.length-1 и определяет строку в двумерном массиве nums. Для индексной переменной j верхняя граница диапазона изменения определяется инструкцией nums[i].length, которая возвращает количество элементов в строке с индексом i (переменная j изменяется от значения 0 до значения nums[i].length-1 включительно). Значение элементам массива присваивается командой nums[i][j]=val++. Ниже показано, как выглядит результат выполнения программы:
Результат выполнения программы (из листинга 3.3) Как и ожидалось, мы получили массив, у которого в разных строках содержится разное количество элементов. » Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок Для Хаброжителей скидка 25% по купону — Java По факту оплаты бумажной версии книги на e-mail высылается электронная книга.