JavaRush /Курси /Java Syntax Zero /Зубчасті масиви в Java

Зубчасті масиви в Java

Java Syntax Zero
Рівень 6, Лекція 6
Відкрита

1. Нерівні масиви

У Java ви, як програміст, можете не лише поміняти рядки двовимірного масиву місцями, але й сконструювати цей масив самостійно як заманеться.

Припустімо ви хочете, щоб перший рядок двовимірного масиву мав довжину 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


6
Задача
Java Syntax Zero, 6 рівень, 6 лекція
Недоступна
Трикутний масив
Трикутний масив

2. Робота з двовимірними масивами

Припустімо, ви хочете вивести на екран двовимірний масив. Як же це зробити?

Наш код матиме приблизно такий вигляд:

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 Zero, 6 рівень, 6 лекція
Недоступна
Створюємо двовимірний масив
Створюємо двовимірний масив

3. Багатовимірні масиви

Ще один цікавий факт про масиви. Напевно, ви вже здогадуєтеся, про що йдеться. Якщо можна зробити двовимірний масив, значить, можна зробити й тривимірний?

Так, можна створити масив будь-якої розмірності. Такі масиви називають багатовимірними.

З цікавості спробуймо створити багатовимірний масив розмірності 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 Zero, 6 рівень, 6 лекція
Недоступна
Створюємо мультимасив
Створюємо мультимасив
Коментарі (23)
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ
Grimnir Рівень 37
21 серпня 2025
Можна реалізувати в один рядок через deepToString
Alex Рівень 2
13 серпня 2024

for (int i = 0; i < 10; i++) {
            result[i] = new int[i + 1];

            for (int j = 0; j < i; j++) {
                result[i][j] = (i - 2) + (j + 1);
                System.out.print(' ');
                System.out.print(result[i][j]);
            }

            System.out.println();
        }
не викупаю чому не приймає навіть
hidden #3500645 Рівень 30
3 листопада 2024
1. У 4 рядку помилка - лічильник потрібно порівнювати з довжиною рядка

for (int j = 0; j < result[i].length; j++)
2. У 5 рядку помилка - нам потрібна сума індексів

result[i][j] = i + j;
3. Рядки 6 та 7 потрібно поміняти місцями Тоді все наче працюватиме коректно
Alex Рівень 2
13 січня 2025
урила мене
Artemiy Рівень 18
27 травня 2024
Мозок плавиться 😖
Feher Yana Рівень 23
4 квітня 2024
• Метод main(String[]) має зчитувати N+1 чисел з клавіатури. Це означає що ви повинні зчитати з консолі число N, а потім зчитати ще N-ну к-сть чисел. Тобто, N(к-сть чисел яку ви зчитуєте, після того, як дізнались це саме N) та +1(власне саме число N). Якщо int n = 3, то після нього ви зчитаєте ще 3 числа. Отак і виходить 3 числа(N) і n = 3(+1), всього зчитуєте 4 числа.
Ivan Kravets Рівень 22
11 грудня 2023
бісить коли код працює і дає правильний результат але не проходить валідацію. хард задача зробилася за три хвилини)))
Viacheslav B. Рівень 1
31 січня 2024
Ага, а ще інколи треба вірно зрозуміти умову, бо на приклад я досі не можу зрозуміти - "Метод main(String[]) має зчитувати N+1 чисел з клавіатури." Я так спершу і зробив – (sc.nextInt()+1), звісно валідацію не пройшов. )
Sava_crosava Рівень 23
9 вересня 2023
В останньому завданні краще дописати приклад виведення, чи вказати щоб виведення було в довільному вигляді) Більше часу пішло на роздуми як краще це вивести щоб було красиво ніж на написання коду)
Василь Рівень 7
11 липня 2023
що означає?:

Метод main(String[]) має зчитувати N+1 чисел з клавіатури.
Vitalii Рівень 11
2 серпня 2023
що в умові задачі помилка
Oleksandr Tkachenko Рівень 51
6 квітня 2023
я вибачаюсь, але валідація задач потребує суттєвого доопрацювання)
Bilan Maksym Рівень 43 Expert
15 березня 2023
Спочатку думав, що все забув, але хоч я і старий, але не скажу що зовсім складно.
Марк Рівень 8
22 лютого 2023
наведіть приклад використання багатовимірного массиву massiv[][][][]?
Oleksandr Tkachenko Рівень 51
6 квітня 2023
наприклад 3 вимірні об'єкти які змінюються в часі)