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

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

Відкрита

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, 09:31
Можна реалізувати в один рядок через deepToString
Alex
Рівень 2
13 серпня 2024, 01:02
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, 15:29
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, 00:55
урила мене
Artemiy
Рівень 18
27 травня 2024, 15:29
Мозок плавиться 😖
Feher Yana
Рівень 23
4 квітня 2024, 17:05
• Метод main(String[]) має зчитувати N+1 чисел з клавіатури. Це означає що ви повинні зчитати з консолі число N, а потім зчитати ще N-ну к-сть чисел. Тобто, N(к-сть чисел яку ви зчитуєте, після того, як дізнались це саме N) та +1(власне саме число N). Якщо int n = 3, то після нього ви зчитаєте ще 3 числа. Отак і виходить 3 числа(N) і n = 3(+1), всього зчитуєте 4 числа.
Ivan Kravets старший механік в ImperyMotors
11 грудня 2023, 19:20
бісить коли код працює і дає правильний результат але не проходить валідацію. хард задача зробилася за три хвилини)))
Viacheslav B. System Administrator
31 січня 2024, 15:11
Ага, а ще інколи треба вірно зрозуміти умову, бо на приклад я досі не можу зрозуміти - "Метод main(String[]) має зчитувати N+1 чисел з клавіатури." Я так спершу і зробив – (sc.nextInt()+1), звісно валідацію не пройшов. )
Sava_crosava Професор кулінарних наук в НУ "Собачий рай"
9 вересня 2023, 13:45
В останньому завданні краще дописати приклад виведення, чи вказати щоб виведення було в довільному вигляді) Більше часу пішло на роздуми як краще це вивести щоб було красиво ніж на написання коду)
Василь trainee в Kindgeek
11 липня 2023, 09:50
що означає?:
Метод main(String[]) має зчитувати N+1 чисел з клавіатури.
Vitalii Backend Developer
2 серпня 2023, 19:00
що в умові задачі помилка
Oleksandr Tkachenko
Рівень 51
6 квітня 2023, 18:26
я вибачаюсь, але валідація задач потребує суттєвого доопрацювання)
Bilan Maksym
Рівень 43
Expert
15 березня 2023, 17:19
Спочатку думав, що все забув, але хоч я і старий, але не скажу що зовсім складно.
Марк Диванний експерт в Ютуб
22 лютого 2023, 21:19
наведіть приклад використання багатовимірного массиву massiv[][][][]?
Oleksandr Tkachenko
Рівень 51
6 квітня 2023, 18:28
наприклад 3 вимірні об'єкти які змінюються в часі)