— Привет, мой самый умный ученик!

— Здравствуй, Риша!

— Не скучал без новой темы о массивах? Сегодня у нас как раз одна такая! Сегодня я расскажу тебе о зубчатых и многомерных массивах.

— Звучит кровожадно и пугающе.

— Не волнуйся, настоящий программист всегда справится, если массив показывает ему свои зубы. А на самом деле “зубчатость” — это возможность не только поменять строки двумерного массива местами, но и сконструировать массив самому так, как ему нужно.

— Допустим, нужно, чтобы у первой строки двумерного массива была длина 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 для нулевой строки.

— А для первой, получается, matrix[1].length?

— Совершенно верно. И в первом случае результат вызова команды будет 10, а во втором — 50.

undefined
6
Задача
Java Syntax Pro, 6 уровень, 6 лекция
Недоступна
Треугольный массив
Создай треугольный массив, где значение каждого элемента - это сумма его индексов. Например: array[7][3] = 7 + 3 = 10, array[3][0] = 3 + 0 = 3. Выведи массив на экран в следующем виде: 0 1 2 2 3 4 3 4 5 6 4 5 6 7 8 5 6 7 8 9 10 ... Числа в строке разделены пробелом. Задать треугольн

Работа с двумерным массивом

— Давай теперь попробуем вывести на экран двумерный массив:

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
undefined
6
Задача
Java Syntax Pro, 6 уровень, 6 лекция
Недоступна
Создаем двумерный массив
Двумерный массив — это массив массивов, то есть в каждой его ячейке находится ссылка на некий массив. Но гораздо проще его представить в виде таблицы, у которой задано количество строк (первое измерение) и количество столбцов (второе измерение). В этой задаче мы будем создавать такой массив. Для эт

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

— Амиго! Ты ведь уже успел догадаться, что если есть двумерные массивы, то могут быть и трёхмерные?

— Как раз об этом думал, но стеснялся спросить.

— Да, можно создать трёхмерный массив, и вообще, массив любой размерности. Такие массивы называют «многомерными». Давай ради интереса создадим многомерный массив размерности 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
  }
}

— И это только создание массива! А ведь с ним еще и работать как-то нужно.

— Забираю свои слова обратно. Не так-то и просто с ними работать. Но можно.

— Раз можно, вот тебе бонусное задание. Напиши код, который выводит на экран все значения трехмерного массива. Знаний у тебя предостаточно. Главное — прояви терпение и внимательность. Или изобретательность (есть одно тайное знание, которое поможет решить эту задачку в одну строку). А лучше всего — реши и так, и так.

— Спасибо, Риша. Я попробую.

undefined
6
Задача
Java Syntax Pro, 6 уровень, 6 лекция
Недоступна
Создаем мультимассив
В методе main(String[]) выведи на экран все числа из трехмерного массива multiArray.