1. Нерівні масиви

У Java ви, як програміст, можете не лише поміняти рядки двовимірного масиву місцями, але й сконструювати цей масив самостійно як заманеться.

Припустімо ви хочете, щоб перший рядок двовимірного масиву мав довжину 10, а другий — 50. Чи можна так зробити? Так, можна.

Спершу потрібно створити «контейнер контейнерів» — перший масив, який зберігатиме посилання на масиви-рядки. Це роблять так:

int[][] ім'я = new int[висота][];

Ви просто не вказуєте другий параметр, і Java-машина створює тільки «контейнер контейнерів». От що буде в пам'яті після виконання цього коду:

Ну а як створювати одновимірні масиви, ви вже знаєте 🙂

Остаточний вигляд коду буде таким:

// Важлива матриця з даними
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50];
Двовимірний масив

Нульовий рядок — масив із 10 елементів
Перший рядок — масив із 50 елементів.

Щойно ви створили так званий «нерівний масив».

І от якщо ми захочемо вивести всі елементи цього масиву на екран, нам стане у великій пригоді властивість length, адже рядки масиву мають різну довжину.

До речі, як визначити довжину «контейнера контейнерів» у нашому прикладі? Адже це теж об'єкт-масив, а значить, він має довжину. Правильна відповідь — matrix.length.

А як щодо довжини масивів-рядків? matrix[0].length



2. Робота з двовимірними масивами

Припустімо, ви хочете вивести на екран двовимірний масив. Як же це зробити?

Наш код матиме приблизно такий вигляд:

int[][] matrix = new int[3][];
matrix[0] = new int[]{1, 2, 3, 4, 5, 6};
matrix[1] = new int[]{1, 2, 3};
matrix[2] = new int[]{1};
for (int i = 0; i < matrix.length; i++) {
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
Створення масиву
Заповнення масиву значеннями


Зовнішній цикл по рядках масиву — перебирає рядки масиву.
Внутрішній цикл по комірках — перебирає комірки одного рядка.

Вам знадобиться два вкладених цикли. Перший ми назвемо зовнішнім, а другий — внутрішнім.

У зовнішньому циклі (змінна i) ми по черзі проходимо по всіх масивах-рядках, з яких складається наш двовимірний масив. Кожне значення змінної i відповідає рядку масиву з таким номером.

У внутрішньому циклі (змінна j) ми перебираємо всі комірки масивів-рядків. У результаті роботи внутрішнього циклу на екран буде виведено рядок, який складається зі значень одного рядка масиву.

От що буде виведено на екран:

Оброблено один рядок масиву
1 2 3 4 5 6 
Оброблено два рядки масиву
1 2 3 4 5 6
1 2 3 
Оброблено три рядки масиву
1 2 3 4 5 6
1 2 3
1 


3. Багатовимірні масиви

Ще один цікавий факт про масиви. Напевно, ви вже здогадуєтеся, про що йдеться. Якщо можна зробити двовимірний масив, значить, можна зробити й тривимірний?

Так, можна створити масив будь-якої розмірності. Такі масиви називають багатовимірними.

З цікавості спробуймо створити багатовимірний масив розмірності 4.

 int[][][][] matrix = new int[2][3][4][5];

Занадто простий код, чи не так?

А якщо створити його вручну?

int[][][][] matrix;
matrix = new int[2][][][];                // створюємо масив «посилань на посилання на посилання» довжиною 2
for (int i = 0; i < matrix.length; i++)
{
  matrix[i] = new int[3][][];             // створюємо масив «посилань на посилання» довжиною 3
  for (int j = 0; j < matrix[i].length; j++)
  {
    matrix[i][j] = new int[4][];          // створюємо масив посилань довжиною 4
    for (int k = 0; k < matrix[i][j].length; k++)
      matrix[i][j][k] = new int[5];       // створюємо масиви цілих чисел довжиною 5
  }
}

І це лише створення масиву! А з ним ще й працювати якось треба.

Бонусне завдання — написати код, який виводить на екран усі значення тривимірного масиву.