Оценить:
 Рейтинг: 3.5

Java за неделю. Вводный курс

Год написания книги
2018
<< 1 ... 10 11 12 13 14 15 16 17 18 ... 25 >>
На страницу:
14 из 25
Настройки чтения
Размер шрифта
Высота строк
Поля

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 Двумерные массивы

Двумерный массив проще всего представить в виде таблицы, состоящей из строк и столбцов. Каждый элемент двумерного массива однозначно определяется двумя индексами – номером строки и номером столбца, на пересечении которых находится элемент. К сожалению, этот образ хоть и нагляден, но не совсем корректен. Дело в том, что строки в этой «таблице» не обязательно должны иметь одинаковую длину.

Более правильно двумерный массив можно представить как одномерный «внешний» массив, элементами которого являются ссылки на одномерные «вложенные» массивы. Первый индекс определяет ссылку на вложенный массив. Второй индекс определяет элемент вложенного массива. В таком случае более очевидно, что вложенные массивы могут иметь различный размер.

Строго говоря, многомерные массивы с вложенными массивами одинакового размера являются лишь частным случаем общего типа коллекции объектов. Язык Java позволяет работать с коллекциями, в которых вложенные объекты имеют разный размер. Но углубленное изучение понятия коллекций выходит за рамки книги для начинающих. Пока вам достаточно знать, что вложенные массивы могут иметь разную длину, и в работе с такими массивами нет принципиальных особенностей.

Двумерный массив определяется так же, как одномерный:

int [] [] coord = new int [10] [15];

Данную команду можно разделить на две:

int [] [] coord;

coord = new int [10] [15];

Нумерация по каждому индексу начинается с нуля. Размер массива зависит от того, о каком массиве идет речь – внешнем или вложенном. Размер по первому индексу означает количество вложенных массивов (количество строк):

int x = coord. length; // x = 10

Размер по второму индексу означает количество элементов вложенного массива (количество столбцов):

int y = coord [0].length; // y = 15

Поскольку при создании классического двумерного массива (а не коллекции) все вложенные массивы имеют одинаковый размер, то первый индекс не имеет особого значения. Важно лишь, чтобы он находился в переделах размерности по количеству вложенных массивов.

5.2.1 Инициализация двумерного массива

Двумерный массив можно инициализировать при создании, перечислив значения в явном виде в конструкции из фигурных скобок:

int [] [] nums = {{4,9,12,0}, {2,7,3,5}};

Для инициализации массива упорядоченными данными используются вложенные циклы. Сейчас вы уже готовы написать программу инициализации двумерного цикла самостоятельно. Один из возможных вариантов программы приведен в листинге 5.2.

Листинг 5.2 Инициализация двумерного массива

public class Listing5_2 {

public static void main (String [] args) {

// Объявление двумерного массива 10x15

int [] [] coord = new int [10] [15];

// Перебор элементов внешнего массива

for (int i=0;i <coord. length; i++) {

// Перебор элементов вложенного массива

for (int j=0;j <coord [0].length; j++) {

// Пример выражения для генерации значений

coord [i] [j] = (i+j) *j;

}

}

// Вывод сформированных значений на печать

for (int [] tmp1:coord) {

for (int tmp2:tmp1) {

System.out.print (tmp2+"\t»);

}

System.out.print (»\n»);
<< 1 ... 10 11 12 13 14 15 16 17 18 ... 25 >>
На страницу:
14 из 25