Многомерные массивы
Многомерные массивы представляют собой массивы массивов.
При объявлении переменной многомерного массива для указания каждого дополнительного индекса используется отдельный ряд квадратных скобок. Например:
int[][] twoD = new int[5][4];
Следующий рисунок показывает как можно визуально представить двумерный массив 5 на 4. Левый индекс определяет строку, а правый столбец:
Следующий пример демонстрирует каким образом можно установить значения в двухмерный массив 5×4. Для перебора строк используется внешний цикл for , для перебора столбцов — внутренний. Каждому следующему элементу присваивается значение на единицу большее чем предыдущее.
public class TwoDArray1 < public static void main(String[] args) < int[][] twoD = new int[5][4]; int i, j, k = 0; for (i = 0; i < 5; i++) < for (j = 0; j < 4; j++) < twoD[i][j] = k++; System.out.print(twoD[i][j] + " "); >System.out.println(); > > >
Рассмотрим теперь как представлен двумерный массив int[][] twoD = new int[3][4]; в памяти. Переменная twoD указывает не на матрицу, а на строку (красного цвета) состоящую из трех элементов. Значение каждого элемента — это ссылка на строку из четырех элементов (фиолетового цвета).

Следующая картинка показывает каким образом, хранится трехмерный массив int[][][] threeD = new int[3][4][2] в памяти:

Подобным образом может храниться массив любой размерности в памяти.
В двумерных массивах, которые мы рассматривали до сих пор, количество элементов в каждой строке одинаково — чаще всего так и бывает. Но это не обязательно, каждая строка может содержать разное количество элементов. Например:

Посмотрим код, реализующий такой массив. При объявлении двумерного массива необходимо задать количество элементов только для первой размерности — int[][] array = new int[4][] . Таким образом, мы указываем количество строк в массиве, но под каждую строку память не выделяем. Далее выделяем отдельно память под каждую строку массива. Например, строка с индексом ноль будет размера 1 — array[0] = new int[1] .
public class TwoDArray2 < public static void main(String[] args) < int[][] array = new int[4][]; array[0] = new int[1]; array[1] = new int[2]; array[2] = new int[3]; array[3] = new int[4]; int i, j, k = 0; for (i = 0; i < 4; i++) < for (j = 0; j < i + 1; j++) < array[i][j] = k++; System.out.print(array[i][j] + " "); >System.out.println(); > > >
Для многомерных массивов можно также использовать блок для инициализации, если значения всех элементов заранее известны. Каждая отдельная строка заключается в фигурные скобки:
public class TwoDArray3 < public static void main(String[] args) < double[][] arrayTwoD = < , , , >; for (double[] arrayOneD : arrayTwoD) < for (double element : arrayOneD) < System.out.print(element + " "); >System.out.println(); > > >
Презентацию с видео можно скачать на Patreon .
Многомерные массивы в Java — введение в Java 021 #
Массив — это совокупность однотипных переменных, для обращения к которым используется общее имя. Java допускает создание массивов любого типа, которые могут иметь одно или несколько измерений.

static void month() int[][] monthCalendar; monthCalendar = new int[4][7]; for (int outer = 0; outer monthCalendar.length; outer++) for (int inner = 0; inner monthCalendar[outer].length; inner++) monthCalendar[outer][inner] = outer*7 + inner + 1; System.out.println(monthCalendar[outer][inner]); > > System.out.println("Plz Computer, print me element [1][3], I expect 11: " + monthCalendar[1][3]); >
Я создал массив с четырьмя строчками и семью столбиками. Создал два фор цикла для инициализации массива. Во внешнем цикле я обхожу столбики, во внутреннем цикле я обхожу строчки. В программировании отсчёт начинается с нуля, а не с единицы и формула инициализации дней февраля равна порядковый номер строчки умноженный на семь плюс порядковый номер столбика.
Можно создать трёхмерный и четырёхмерный массив. Если будете играться, то имейте в виду, что с увеличением многомерности вы увеличивайте потребляемые мощности. Для ознакомления с основами программирования достаточно двухмерного массива(уверенного использования) и понятия, что массив может состоять из массивов. И массивы могут быть разными, как и длина строчек и столбцов. По этому есть такое понятие как длина массива и длина измерения массива.
Двумерный массив #
Двумерный массив — это массив одномерных массивов. Если вам нужен двумерный массив, то используйте пару квадратных скобок. Доступ к конкретному элементу массива осуществляется по его индексу.
String[][] myArray = new String[5][3]; myArray[0][0] = "1"; myArray[0][1] = "Матвеев"; myArray[0][2] = "№01978434"; myArray[1][0] = "2"; myArray[1][1] = "Васечкин"; myArray[1][2] = "№21321434"; myArray[2][0] = "3"; myArray[2][1] = "Сидоров"; myArray[2][2] = "№412345678"; myArray[3][0] = "4"; myArray[3][1] = "Петечкин"; myArray[3][2] = "№587654321"; myArray[3][0] = "4"; myArray[3][1] = "Герасимов"; myArray[3][2] = "№79898321";
| ID ученика | Фамилия ученика | Номер паспорта |
|---|---|---|
| 1 | Матвеев | №01978434 |
| 2 | Васечкин | №21321434 |
| 3 | Сидоров | №412345678 |
| 4 | Петечкин | №587654321 |
| 5 | Герасимов | №79898321 |
Трёхмерный массив фиксированной длины:
int[][][] a1 = new int[10][20][30];
Многомерные и несимметричные массивы #
byte[][][] byteArray = 0, 1, 2>, 1, 2, 3>, 3, 4, 5> >, 1, 2, 3>, 2, 3, 4>, 5, 6, 7> > >;
int[][] a1 = new int[5][];// двумерный массив с 5 строками a1[0] = new int [1]; a1[1] = new int [2]; a1[2] = new int [3]; a1[3] = new int [4]; a1[4] = new int [5]; for (int[] array : a1) for (int element : array) System.out.print(element + " "); > System.out.println(); > 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
int[][] example = 1>, 2, 2>, 3, 3, 3>, 4, 4, 4, 4>, 5, 5, 5, 5, 5> >;
Класс java.util.Arrays содержит методы для работы с массивами.
- copyOf() − предназначен для копирования массива
- copyOfRange() − копирует часть массива
- toString() − позволяет получить все элементы в виде одной строки
- fill() − заполняет массив переданным значением (удобно использовать, если нам необходимо значение по умолчанию для массива)
- equals() − проверяет на идентичность массивы
- deepEquals() − проверяет на идентичность массивы массивов
int arr[] = 2, 2, 1, 8, 3, 2, 2, 4, 2>; // To fill complete array with a particular value Arrays.fill(arr, 10); System.out.println("Array completely filled with 10\n" + Arrays.toString(arr)); System.out.printf("Modified arr[] : %s", Arrays.toString(arr));
Домашнее задание #

- Создать таблицу умножения(Пифагора) для младших классов при помощи двумерного массива.
- Создайте массив размерностью 5 на 6 и заполните его случайными числами (в диапазоне от 0 до 99 ). Выведите на консоль третью строку
- Просуммируйте все элементы двумерного массива.
- Дан двумерный массив, содержащий отрицательные и положительные числа. Выведете на экран номера тех ячеек массива, которые содержат отрицательные числа.
- Отсортируйте элементы в строках двумерного массива по возрастанию
- Даны матрицы С и D размерностью 3 на 3 и заполненные случайными числами в диапазоне от 0 до 99.
- Выполните по отдельности сначала сложение, потом умножения матриц друг на друга. Выведете исходные матрицы и результат вычислений на консоль.
Дополнительные материалы #
- Multi-Dimensional Arrays In Java
- Многомерные массивы
Многомерные массивы Java
В Java можно объявить массив массивов, известный как многомерный массив. К примеру:
int[][] a = new int[3][4];
Здесь мы видим двухмерный массив Java , который может содержать до 12 элементов типа int :

Не забывайте, что индексирование в Java начинается с нуля, поэтому первые элементы массива имеют индекс 0 , а не 1 .
Аналогично можно объявить и трёхмерный ( 3D ) массив. Например:
String[][][] personalInfo = new String[3][4][2];
В примере выше personalInfo — это трёхмерный массив, в котором может быть до 24 (3*4*2) элементов типа String .
В Java составляющие многомерного массива — это тоже массивы. Если вы знаете C/C++ , то может показаться, что многомерные массивы в Java и C/C++ работают одинаково. Но это не совсем так — в Java ряды массивов могут быть разной длины. Разницу мы увидим во время инициализации.
Как инициализировать двумерный массив Java?
Ниже приводится пример инициализации двумерного массива Java :
int[][] a = < , , , >;
Каждый компонент массива также представляет собой массив, и длина каждого ряда отличается:

Давайте напишем программу, чтобы это доказать:
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; System.out.println("Длина ряда 1: " + a[0].length); System.out.println("Длина ряда 2: " + a[1].length); System.out.println("Длина ряда 3: " + a[2].length); > >
При запуске этой программы мы получим:
Длина ряда 1: 3
Длина ряда 2: 4
Длина ряда 3: 1
Поскольку многомерный массив состоит из отдельных массивов (a[0], a[1] and a[2]) , можно использовать метод length для определения длины каждого ряда длины двумерного массива Java.
Пример: вывод на экран всех элементов двумерного массива с помощью циклов :
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; for (int i = 0; i < a.length; ++i) < for(int j = 0; j < a[i].length; ++j) < System.out.println(a[i][j]); >> > >
Всегда лучше использовать цикл for…each , когда нужно пройти по элементам массива. Пример сортировки двумерного массива Java можно записать с помощью цикла for…each следующим образом:
class MultidimensionalArray < public static void main(String[] args) < int[][] a = < , , , >; for (int[] innerArray: a) < for(int data: innerArray) < System.out.println(data); >> > >
При запуске этой программы мы получим следующий результат заполнения двумерного массива Java :
1 -2 3 -4 -5 6 9 7
Как инициализировать многомерный массив Java?
Многомерный или трёхмерный массив инициализируется почти так же, как двухмерный:
// test — трёхмерный массив int[][][] test = < < , >, < , , > >;
Трёхмерный массив — это массив, состоящий из двумерных массивов. Как и у двумерных массивов Java , его ряды могут быть различной длины.
Пример: программа для вывода элементов трёхмерного массива с помощью циклов :
class ThreeArray < public static void main(String[] args) < // test – трёхмерный массив int[][][] test = < < , >, < , , > >; // цикл for..each проходит по элементам трёхмерного массива for (int[][] array2D: test) < for (int[] array1D: array2D) < for(int item: array1D) < System.out.println(item); >> > > >
При запуске программы вывода двумерного массива Java получаем следующий результат:
1 -2 3 2 3 4 -4 -5 6 9 1 2 3
МК Михаил Кузнецов автор-переводчик статьи «
Как вывести на экран многомерный массив java
Для вывода двумерного массива можно воспользоваться методом Arrays.deepToString() класса java.util.Arrays Например:
int[][] arr = 1, 2>, 3, 4>, 5, 6>>; System.out.println(Arrays.deepToString(arr));
Этот код выведет:
Данный метод позволяет корректно вывести массив любой размерности, включая массивы массивов (то есть двумерные, трехмерные и так далее).
