Найти в Дзене
Анастасия Софт

Урок 18 для Java-разработчика. 💻💡Путеводитель по многомерным массивам в Java — с примерами

Если вы уже разобрались с одномерными массивами, пора переходить к следующему уровню — двумерные и многомерные массивы в Java. Это как переход от шашек к шахматам: всё ещё похоже, но с дополнительным измерением. Массивы в Java могут быть не только одномерными (например, массив чисел), но и массивами массивов — именно так Java реализует многомерность. И да, это чуть сложнее, но мы разложим всё по полочкам. Двумерный массив — это массив массивов. Представьте себе таблицу: строки — первая размерность, столбцы — вторая. int[][] table = new int[3][4]; // 3 строки, 4 столбца Элемент с индексом table[2][3] — это значение в 3-й строке и 4-м столбце. Создадим двумерный массив, где элемент [i][j] равен квадрату суммы индексов: int[][] squares = new int[4][4];
for (int i = 0; i < squares.length; i++) {
for (int j = 0; j < squares[i].length; j++) {
squares[i][j] = (i + j) * (i + j);
System.out.print(squares[i][j] + " ");
}
System.out.println();
} Комментарии: Заполняем
Оглавление
Урок 18 для Java-разработчика. 💻💡Путеводитель по многомерным массивам в Java — с примерами
Урок 18 для Java-разработчика. 💻💡Путеводитель по многомерным массивам в Java — с примерами

Введение

Если вы уже разобрались с одномерными массивами, пора переходить к следующему уровню — двумерные и многомерные массивы в Java. Это как переход от шашек к шахматам: всё ещё похоже, но с дополнительным измерением.

Массивы в Java могут быть не только одномерными (например, массив чисел), но и массивами массивов — именно так Java реализует многомерность. И да, это чуть сложнее, но мы разложим всё по полочкам.

Что такое двумерный массив?

Двумерный массив — это массив массивов. Представьте себе таблицу: строки — первая размерность, столбцы — вторая.

int[][] table = new int[3][4]; // 3 строки, 4 столбца

Как это работает:

  • table.length — количество строк (3);
  • table[0].length — количество столбцов в первой строке (4).
Элемент с индексом table[2][3] — это значение в 3-й строке и 4-м столбце.

Пример 1: Таблица квадратов

Создадим двумерный массив, где элемент [i][j] равен квадрату суммы индексов:

int[][] squares = new int[4][4];
for (int i = 0; i < squares.length; i++) {
for (int j = 0; j < squares[i].length; j++) {
squares[i][j] = (i + j) * (i + j);
System.out.print(squares[i][j] + " ");
}
System.out.println();
}

Комментарии:

  • Внешний цикл — по строкам;
  • Внутренний — по столбцам;
  • (i + j)^2 — для интересной математики.

Пример 2: Шахматная доска

Заполняем массив 8x8 символами 'W' и 'B' в шахматном порядке:

char[][] chessBoard = new char[8][8];
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
chessBoard[i][j] = (i + j) % 2 == 0 ? 'W' : 'B';
}
}

Пример 3: Неровные массивы (jagged arrays)

В Java можно создавать массивы разной длины внутри главного массива:

int[][] jagged = new int[3][];
jagged[0] = new int[2];
jagged[1] = new int[4];
jagged[2] = new int[1];

Это полезно, если, скажем, у вас расписание на неделю, где понедельник — тяжёлый, а пятница — выходной. ;)

Пример 4: Сумма всех элементов массива

int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
int sum = 0;
for (int[] row : matrix) {
for (int num : row) {
sum += num;
}
}
System.out.println("Сумма: " + sum);

Пример 5: Массив строк

String[][] greetings = {
{"Привет", "Hello"},
{"Мир", "World"}
};
System.out.println(greetings[0][0] + " " + greetings[1][0]); // Привет Мир

Пример 6: Сортировка каждой строки

int[][] values = {
{3, 2, 1},
{9, 7, 8},
{6, 5, 4}
};
for (int[] row : values) {
Arrays.sort(row);
System.out.println(Arrays.toString(row));
}

Пример 7: Количество чётных чисел

int[][] nums = {
{2, 5, 8},
{1, 4, 7},
{6, 3, 9}
};
int evenCount = 0;
for (int[] row : nums) {
for (int val : row) {
if (val % 2 == 0) evenCount++;
}
}
System.out.println("Чётных чисел: " + evenCount);

Пример 8: Проверка на симметричность (для матрицы NxN)

boolean isSymmetric = true;
int[][] mat = {
{1, 2, 3},
{2, 5, 6},
{3, 6, 9}
};
for (int i = 0; i < mat.length; i++) {
for (int j = 0; j < mat[i].length; j++) {
if (mat[i][j] != mat[j][i]) {
isSymmetric = false;
break;
}
}
}
System.out.println("Симметрична? " + isSymmetric);

Маленькая задачка перед выводом

Задача:
Создайте трёхмерный массив int[][][] cube = new int[2][3][4]. Заполните его значениями i * j * k, где i, j, k — индексы.

Выведите сумму всех элементов.

Выводы

  • Многомерные массивы — это массивы массивов;
  • Двумерный массив — таблица: строки и столбцы;
  • Jagged arrays — когда строки разной длины;
  • Используйте Arrays.deepToString() для вывода;
  • Следите за NullPointerException, когда массивы ещё не инициализированы.

Тест на самопроверку

Вопрос 1. Какой из следующих вариантов корректно создаёт jagged-массив?
A) int[][] arr = new int[][]{{1,2},{3,4,5}};
B) int[][] arr = {{1,2},{3,4,5}};
C) int[][] arr = new int[2][3];
D) int[][] arr = new int[3][];

Вопрос 2. Что выведет следующий код?

int[][] arr = new int[2][2];
System.out.println(Arrays.deepToString(arr));

A) null
B) [[0, 0], [0, 0]]
C) 0 0 0 0
D) Ошибка компиляции

Вопрос 3. Что произойдёт при выполнении кода?

int[][] jag = new int[3][];
jag[0] = new int[2];
jag[1] = new int[3];
System.out.println(jag[2][0]);

A) 0
B) NullPointerException
C) Ошибка компиляции
D) 1

Ответы на тест:

  1. Правильные варианты: A, B, D
  2. B — [[0, 0], [0, 0]]
  3. B — NullPointerException, потому что jag[2] == null

Готово! Теперь вы — мастер двумерных и многомерных массивов в Java! Не забудьте подписаться, чтобы не пропустить следующие уроки. До встречи!