Skip to content

Многомерные массивы

Многомерные массивы — это массивы, элементы которых также являются массивами. В Java они могут иметь несколько уровней вложенности, что позволяет создавать сложные структуры данных. Самый распространённый вид многомерных массивов — это двумерные массивы, которые можно представить в виде матрицы или таблицы.

Цель:

  • Изучить понятие многомерных массивов в Java.
  • Научиться объявлять и инициализировать многомерные массивы.
  • Закрепить навыки работы с многомерными массивами через примеры.

Объявление и инициализация многомерных массивов

Многомерные массивы объявляются так же, как и одномерные, но с добавлением дополнительных пар квадратных скобок [] для каждого уровня вложенности.

Пример объявления двумерного массива:

int[][] matrix;

Здесь matrix — это двумерный массив целых чисел. Для объявления трехмерного массива нужно добавить ещё одну пару скобок:

int[][][] threeDArray;

Инициализация многомерного массива:

Многомерный массив можно инициализировать сразу при объявлении:

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

Этот массив можно представить как таблицу:

1 2 3
4 5 6
7 8 9

Пример создания и инициализации массива программно:

int[][] matrix = new int[3][3];  // Создаём массив 3x3
matrix[0][0] = 1;
matrix[0][1] = 2;
matrix[0][2] = 3;
// и так далее...

Здесь создаётся массив с тремя строками и тремя столбцами. Элементы массива можно заполнять вручную или с помощью циклов.


Доступ к элементам многомерного массива

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

Пример:

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
System.out.println(matrix[0][1]);  // Вывод: 2

Здесь matrix[0][1] означает элемент из первой строки и второго столбца.


Работа с многомерными массивами через циклы

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

Пример вывода всех элементов двумерного массива:

public class Main {
    public static void main(String[] args) {
        int[][] matrix = {
            {1, 2, 3},
            {4, 5, 6},
            {7, 8, 9}
        };

        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();  // Переход на новую строку после каждой строки массива
        }
    }
}

Вывод:

1 2 3
4 5 6
7 8 9

Неправильные массивы (jagged arrays)

В Java двумерные массивы могут быть неправильными (jagged), то есть каждая строка может иметь разное количество столбцов. Это достигается за счёт того, что каждая строка — это отдельный массив.

Пример создания неправильного массива:

int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[2];  // Первая строка длиной 2
jaggedArray[1] = new int[3];  // Вторая строка длиной 3
jaggedArray[2] = new int[1];  // Третья строка длиной 1

В этом примере первая строка имеет два элемента, вторая — три, а третья — один.


Трёхмерные массивы

Трёхмерные массивы можно представить как массив массивов двумерных массивов, то есть как "куб". Для работы с ними используются три индекса.

Пример объявления и инициализации трёхмерного массива:

int[][][] cube = {
    {
        {1, 2, 3},
        {4, 5, 6}
    },
    {
        {7, 8, 9},
        {10, 11, 12}
    }
};

Для доступа к элементу трёхмерного массива используются три индекса:

System.out.println(cube[1][0][2]);  // Вывод: 9

Здесь cube[1][0][2] означает элемент из второй части массива (1), первой строки (0) и третьего столбца (2).


Примеры для практики

  1. Задача: Создание и вывод таблицы умножения Напишите программу, которая создаёт и выводит таблицу умножения размером 5x5.

#### Решение: ```java public class Main { public static void main(String[] args) { int[][] multiplicationTable = new int[5][5];

       for (int i = 0; i < 5; i++) {
           for (int j = 0; j < 5; j++) {
               multiplicationTable[i][j] = (i + 1) * (j + 1);
               System.out.print(multiplicationTable[i][j] + "\t");
           }
           System.out.println();
       }
   }

} ```

  1. Задача: Подсчёт суммы всех элементов двумерного массива Напишите программу, которая находит сумму всех элементов в двумерном массиве.

#### Решение: ```java public class Main { public static void main(String[] args) { int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

       int sum = 0;

       for (int i = 0; i < matrix.length; i++) {
           for (int j = 0; j < matrix[i].length; j++) {
               sum += matrix[i][j];
           }
       }

       System.out.println("Сумма всех элементов: " + sum);
   }

} ```

  1. Задача: Транспонирование матрицы Напишите программу, которая транспонирует матрицу размером 3x3 (т.е. меняет строки и столбцы местами).

#### Решение: ```java public class Main { public static void main(String[] args) { int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };

       int[][] transposed = new int[3][3];

       for (int i = 0; i < matrix.length; i++) {
           for (int j = 0; j < matrix[i].length; j++) {
               transposed[j][i] = matrix[i][j];
           }
       }

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

} ```


Заключение

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

Важные моменты:

  • Многомерные массивы — это массивы массивов. Самый распространённый тип — двумерные массивы.
  • Многомерные массивы могут быть правильными и неправильными (jagged arrays).
  • Для работы с многомерными массивами используются вложенные циклы.
  • Трёхмерные массивы представляют собой "куб" данных, доступ к элементам которого осуществляется с помощью трёх индексов.

[[Programming/java/1. osnovi/Тема 3. Основы ООП/Урок 9. Многомерные массивы/задания|задания]]