JavaRush /Курсы /Java Syntax New Beta /Зубчатые массивы в Java

Зубчатые массивы в Java

Java Syntax New Beta
6 уровень , 6 лекция
Открыта

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

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

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

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

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

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

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
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
  }
}

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

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

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

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

6
Задача
Java Syntax Pro, 6 уровень, 6 лекция
Недоступна
Создаем мультимассив
В методе main(String[]) выведи на экран все числа из трехмерного массива multiArray.
Комментарии (33)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Cat_Virus Уровень 9
30 декабря 2023
пытался вывести массив в том же виде, что и deepToString. Но все-равно, то одна квадратная скобка лишняя, то одной не хватает, то запятые черт знает где:)))
Elbek Уровень 16
9 января 2023
я закончил все лекции и все задачи но нет доступа с этой лекцией. Почему? Из игр закончил спаер и змейку
Kraun4i Уровень 17
22 ноября 2022
Интересно во второй задаче специально 7 чисел а не 6?)) Чтоб немного запутать?)
aiiirborne Уровень 29
29 сентября 2022
Привет Риша, а на картинке Диего 😋
Uver Уровень 32
26 октября 2022
Когда прокачался до 15 лвл и уже можешь отличить Ришу от Диего🤣
Sergey Уровень 33
18 апреля 2022
Видео много "воды", растягивали нерастягиваемое при помощи "ну, но, допустим..."
Benjam1nBTN Уровень 24
16 июля 2022
Вижу такой коммент почти под каждой статьей... В каком видео, в этой статье вообще нет видео
Василий Уровень 25
18 марта 2022
Или изобретательность (есть одно тайное знание, которое поможет решить эту задачку в одну строку). Это тайное знание вы узнаете из следующей лекции.
Pavel R Уровень 1
28 мая 2022
Arrays.deepToString можно вывести, и эта информация была несколько лекций назад в video
Василий Уровень 25
4 июля 2022
Когда я это проходил никаких видео еще не было, их позже добавили. Ну и откровенно говоря я выбрал обучение на JR, как раз из-за того, что тут все текстом. Все-таки расшифровка часового видео читается минут за 5-10.
Alexey Уровень 9
8 февраля 2022
Во втором задании не совсем понятно условие. Написал код чтоб выводило как по образцу, но не проходит проверку.
Кирилл Уровень 35
23 октября 2022
А там же не надо выводить ничего. Там только сформировать массив надо, чтобы он в памяти хранился.
Игорь Топоров Уровень 14
8 января 2022
А ещё есть термин: "Нерегулярные массивы". А ещё в пункте: "Работа с двумерным массивом — Давай теперь попробуем вывести на экран двумерный массив:" //ОБРАТИЕ ВНИМАНИЕ АДМИНЫ int[ ][ ] matrix = new int[3][ ]; matrix[0] = {1, 2, 3, 4, 5, 6}; matrix[1] = {1, 2, 3}; matrix[2] = {1}; Есть тут одна странность, ^НЕ КОМПИЛИРУЕТСЯ данный код Но если добавить такое вот значение, то всё норм: matrix[0] = new int[ ]{1, 2, 3, 4, 5, 6}; //Добавляем new int[ ]. matrix[1] = new int[ ]{1, 2, 3}; matrix[2] = new int[ ]{1}; А вот с одномерным массимвом всё чики пуки: int[ ]matrix = {1, 2, 3};
Benjam1nBTN Уровень 24
16 июля 2022
Хм, да, действительно не компилируется. Наверное потому, что мы инициализировали только столбцы, а строки нет - но хотим уже в них запихнуть кучу значений (а "ячейки" то под них еще не созданы)
Максим Уровень 22 Expert
5 августа 2023
Здесь получается инициализация только строк [3] ,а вот как раз количество столбцов мы не обьявили [ ] и пытаемся засунуть в эти строки значения. matrix[0] = {1, 2, 3, 4, 5, 6}; строка 1 matrix[1] = {1, 2, 3}; строка 2 matrix[2] = {1}; строка 3
Eugene Уровень 28
5 декабря 2021
А в этом примере нет ошибки???
Eugene Уровень 28
5 декабря 2021
Может так должно быть: matrix[0] = new int[]{1, 2, 3, 4, 5, 6}; matrix[1] = new int[]{1, 2, 3}; matrix[2] = new int[]{1}; ?
Игорь Топоров Уровень 14
8 января 2022
Тоже заметил, ВОТ ТАК НАДО: matrix[0] = new int[ ]{1, 2, 3, 4, 5, 6};
Владислав Уровень 9
3 декабря 2021
Можно также воспользоваться циклом for…each Пример для двумерного массива: