1. Вступ
Уявіть собі звичайний масив як довгу коробку з‑під піци, де всі шматочки лежать в один ряд — смачно, але одноманітно.
А тепер уявіть собі розклад робіт або шахову дошку. Там усе організовано у рядки й стовпці — тобто в таблицю. Це якраз типова задача для двовимірного масиву.
У реальному житті двовимірні масиви трапляються дуже часто:
- Таблиці із зарплатами працівників (рядки — працівники, стовпці — місяці).
- Зображення на екрані (кожна «клітинка» має колір пікселя і дві координати: X і Y).
- Матричні обчислення та обробка даних.
- Шахова дошка або поле для «хрестиків‑нуликів».
Іноді двовимірний масив називають матрицею (ця назва походить із математики).
Є багато випадків, коли вам, як програмісту, може знадобитися двовимірний масив. Реалізація майже будь‑якої настільної гри зазвичай спирається на двовимірний масив: «шахи», «шашки», «хрестики‑нулики», «морський бій».

Ігрове поле «шахів» чи «морського бою» ідеально лягає на двовимірні масиви, де координати клітинок задаються числами. Не «пішак e2 ⟶ e4», а «пішак (4,1) ⟶ (4,3)». Для вас, як програміста, це зазвичай простіше реалізувати й опрацювати.
2. Синтаксис оголошення двовимірних масивів
Не лякайтеся — розберемося крок за кроком.
Загальне правило
тип[][] ім'яМасиву;
Пара порожніх [] дужок — не помилка, а вказівка на те, що масив двовимірний.
Приклади
int[][] matrix;
double[][] gradesTable;
string[][] chessBoard;
Створення масиву
Задаємо розміри: кількість рядків і стовпців.
matrix = new int[3][4]; // 3 рядки, 4 стовпці
Це таблиця 3×4: на кшталт таблиці в Excel з трьома рядками та чотирма стовпцями.
Можна одразу оголосити змінну й створити двовимірний масив:
int[][] matrix = new int[3][4];
Можна ініціалізувати одразу значеннями (аналогічно до одномірного масиву):
int[][] example = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// Таблиця: 3 рядки, 3 стовпці
Візуальна схема
┌─────┬─────┬─────┬─────┐
│ 0 │ 1 │ 2 │ 3 │ ← стовпці (columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │ 0,1 │ 0,2 │ 0,3 │ ← рядок 0 (row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │ 1,1 │ 1,2 │ 1,3 │ ← рядок 1 (row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │ 2,1 │ 2,2 │ 2,3 │ ← рядок 2 (row 2)
└─────┴─────┴─────┴─────┘
Кожен елемент задається парою індексів [рядок, стовпець].
3. Індексація та доступ до елементів
У двовимірному масиві для доступу до елемента вказуються два індекси:
- Перший — номер рядка.
- Другий — номер стовпця.
// У другому рядку (індекс 1), у третьому стовпці (індекс 2)
matrix[1][2] = 99;
Якщо ви звикли до шахів, зверніть увагу: індексація починається з нуля. Тобто перший елемент — це [0][0].
Запис і читання
int[][] data = new int[5][2];
data[1][1] = 5; // запис
int value = data[1][1]; // читання
Ось як це виглядає у памʼяті:

4. Заповнення двовимірного масиву
Напишімо код, який заповнить матрицю послідовними числами від 1 до 12, щоб було зрозуміло, як це працює.
int[][] matrix = new int[3][4];
int value = 1;
for (int row = 0; row < 3; row++)
{
for (int col = 0; col < 4; col++)
{
matrix[row][col] = value;
value++;
}
}
Ілюстрація:
Після виконання:
┌────┬────┬────┬────┐
│ 1 │ 2 │ 3 │ 4 │
├────┼────┼────┼────┤
│ 5 │ 6 │ 7 │ 8 │
├────┼────┼────┼────┤
│ 9 │ 10 │ 11 │ 12 │
└────┴────┴────┴────┘
5. Будова двовимірних масивів
Зараз ви дізнаєтеся, як насправді влаштовані двовимірні масиви.
Насправді двовимірні масиви — це масиви одномірних масивів.
Інакше кажучи, у випадку звичайного масиву змінна зберігає посилання на контейнер з елементами. А у разі двовимірного — змінна посилається на обʼєкт, у клітинках якого зберігаються посилання на одномірні масиви (рядки). Краще один раз побачити, ніж довго описувати:

Ліворуч — змінна, що посилається на обʼєкт двовимірного масиву. Посередині — сам обʼєкт двовимірного масиву, у клітинках якого зберігаються посилання на одномірні масиви — рядки. А праворуч — кілька одномірних масивів, тобто рядки нашого двовимірного масиву.
Такий підхід дає Java‑програмісту кілька переваг:
По‑перше, оскільки «контейнер контейнерів» зберігає посилання на масиви‑рядки, ми можемо дуже швидко й просто міняти рядки місцями. Щоб отримати доступ до рядка, достатньо вказати один індекс замість двох. Приклад:
int[][] data = new int[2][5];
int[] row1 = data[0];
int[] row2 = data[1];
За допомогою такого коду можна поміняти рядки місцями:
// Важлива матриця даних
int[][] matrix = {
{1, 2, 3, 4, 5},
{5, 4, 3, 2, 1}
};
int[] tmp = matrix[0];
matrix[0] = matrix[1];
matrix[1] = tmp;
Якщо ви звернетеся до двовимірного масиву, вказавши лише один індекс після його імені, то отримаєте посилання на одномірний масив — рядок двовимірного масиву.
6. Виведення двовимірного масиву на екран
Щоб вивести двовимірну таблицю, зазвичай використовують подвійний цикл — це схоже на «малювання» лабіринту у консолі. Приклад:
for (int row = 0; row < matrix.length; row++)
{
for (int col = 0; col < matrix[row].length; col++)
{
System.out.print(matrix[row][col] + "\t");
}
System.out.println(); // перехід на новий рядок
}
Приклад виведення:
1 2 3 4
5 6 7 8
9 10 11 12
До речі, тепер ви вмієте красиво «малювати» таблиці за допомогою кількох рядків коду!
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ