1 of 34

1

ЛЕКЦІЯ №5.

Створення та обробка елементарних структур

даних (масиви)

Викладач: PhD, Юлія Назар

Програмування на java

2 of 34

agenda

  • Одновиміні масиви
  • Багатовимірна масиви
  • Клас Arrays

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

3 of 34

3

Одновимірні масиви

THE STATE EMERGENCY SERVICE OF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

4 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

array

int

Масиви – це група однотипних змінних, для звернення до яких використовують спільне ім’я.

В Java можливе створення масивів будь-якого типу та різної величини.

Доступ до елементів масиву реалізується через їх індекси.

int

int

int

int

int

int

int

int

0 1 2 3 4 5 6 7 … n

Масиви – це зручний спосіб групування однотипної інформації (елементарна структура даних).

5 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Для того, щоб створити масив, необхідно оголосити тип та ім’я масиву.

Форма оголошення масиву:

тип ім’я_змінної [];

де параметр тип зазначає тип даних усіх елементів масиву.

6 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Для того щоб зв’язати оголошений масив з масивом однотипних значень, потрібно зарезервувати область пам’яті з допомогою оператора new та задати її адресу оголошеному масиву (виділення пам’яті під масив). Загальна форма резервування пам'яті для масиву:

ім’я_масиву = new тип [розмір];

тип ім’я_масиву [];

де тип – тип даних, для яких резервується пам’ять; розмір – кількість елементів в масиві

7 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

для того щоб скористатись оператором new для резервування пам’яті, необхідно зазначити тип та кількість елементів, для яких резервується пам'ять

8 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Елементи масиву, для яких було виділено пам'ять, будуть автоматично ініціалізовані:

  • нульовим 0 значенням (для числових типів);
  • значенням false (для логічного типу);
  • пустим значенням null (для посилкових типів даних).

9 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Змінна масиву month_days містить посилання на масив 12 цілочисельних елементів. Всі значення масиву при його створенні ініціалізуються нульовими значеннями

month_days = new int [12];

int month_days [];

Операції оголошення масиву та резервування пам'яті для його елементів можливо об'єднувати:

int month_days [] = new int [12];

10 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Після створення масиву та резервування пам'яті під нього стає можливим наповнення масиву звертаючись до його елементів за індексом:

public class Array {

public static void main(String[] args) {

int month_days [] = new int [12];

month_days [0] =31;

month_days [1] =28;

month_days [2] =31;

month_days [3] =30;

month_days [4] =31;

...

month_days [8] =30;

month_days [9] =31;

month_days [10] =30;

month_days [11] =31;

}

}

11 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Для звернення до елементів масиву необхідно зазначити ім’я масиву та індекс елементу до якого реалізується запит:

// . . .

System.out.println("В січні " + month_days[0] + "день(днів)");

System.out.println("В лютому " + month_days[1] + "день(днів)");

System.out.println("В березні " + month_days[2] + "день(днів)");

System.out.println("В квітні " + month_days[4] + "день(днів)");

// . . .

Результат роботи програми:

В січні 31 день(днів)

В лютому 28 день(днів)

В березні 31 день(днів)

В квітні 31 день(днів)

12 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Одночасна ініціалізація масиву при його оголошенні відбувається шляхом подання списку виразів, що розділені комами і об’єднані фігурними дужками.

Об’єм масиву автоматично створюється такої величини, щоб вмістити усі перераховані елементи.

int month_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

13 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Усі подані варіанти ініціалізації (наповнення) масиву видають однаковий результат та мають право на існування.

public class AutoArray {

public static void main(String[] args) {

int month_days[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

System.out.println("В січні " + month_days[0] + " день(днів)");

System.out.println("В лютому " + month_days[1] + " день(днів)");

System.out.println("В березні " + month_days[2] + " день(днів)");

System.out.println("В квітні " + month_days[4] + " день(днів)");

// . . .

}

}

14 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Коли застосовують другий варіант ініціалізації масиву?

коли чітко відомо остаточну кількість елементів масиву та те, що значення елементів масиву не будуть змінюватись (масив є статичним)

15 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Програми визначення середнього значення декількох чисел:

public class Average {

public static void main(String[] args) {

double nums[] = { 10.1, 11.2, 12.3, 13.4, 14.5 };

double result = 0;

for (int i = 0; i <= 5; i++) {

result = result + nums[i];

}

System.out.print("Середнє значення рівне "+ result / 5);

}

}

Результат роботи:

Середнє значення рівне 12.2999

16 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Слід пам’ятати, що за умови звернення до визначеного елемента масиву керуюча система Java здійснює перевірку чи зазначений в запиті індекс відповідає діапазону існуючих елементів. Будь-яка спроба звернутись до елемента масиву за межами його діапазону призведе до помилки при виконанні програми.

17 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Метод .length повертає довжину масива.

Його синтаксис наступний:

ім’я масива . length

18 of 34

18

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

THE STATE EMERGENCY SERVICE OF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

19 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

В програмуванні багатовимірні масиви являють собою масиви масивів.

array

int

int

int

int

int

int

int

int

int

0 1 2 3 4 5 6 7 … n

int

int

int

1

0

2

n

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

int

20 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

При оголошенні змінної багатовимірного масиву для зазначення кожного додаткового індексу використовують окремий ряд квадратних дужок.

int twoD[][] = new int[4][5];

21 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Двовимірний масив із двома процедурами: наповнення та виведення вмісту у консоль

public class TwoDArray {

public static void main(String[] args) {

int twoD[][] = new int[4][5];

int i, j, k = 0;

for (i = 0; i < 4; i++) {

for (j = 0; j < 5; j++) {

twoD[i][j] = k;

k++;

}

}

for (i = 0; i < 4; i++) {

for (j = 0; j < 5; j++) {

System.out.print(twoD[i][j] + " ");

}

System.out.println();

}

}

}

Результат роботи програми :

0 1 2 3 4

5 6 7 8 9

10 11 12 13 14

15 16 17 18 19

22 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

При резервуванні пам’яті під багатовимірний масив обов’язково вказувати параметри лише для першого (лівого) виміру масиву. А для кожного наступного виміру пам'ять можливо резервувати окремо (динамічно).

int twoD[][] = new int[4][];

twoD[0] = new int[5];

twoD[1] = new int[5];

twoD[2] = new int[5];

twoD[3] = new int[5];

23 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

int twoD[][] = new int[4][];

twoD[0] = new int[1];

twoD[1] = new int[2];

twoD[2] = new int[3];

twoD[3] = new int[4];

 

int i, j, k = 0;

 

for (i = 0; i < 4; i++) {

for (j = 0; j < i + 1; j++) {

twoD[i][j] = k;

k++;

}

}

for (i = 0; i < 4; i++) {

for (j = 0; j < i + 1; j++) {

System.out.print(twoD[i][j] + " ");

}

System.out.println();

}

Результат роботи програми:

0

1 2

3 4 5

6 7 8 9

24 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Можливість динамічного визначення довжини кожного виміру масиву можливе за рахунок того, що в багатовимірних масивах кожен вимір розцінюється як окремий масив в масиві (масив масивів).

25 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Аналогічно одновимірним масивам, багатовимірні також можна ініціалізовувати під час оголошення з використанням фігурних дужок.

public class TwoDArray {

public static void main(String[] args) {

double m[][] = {

{ 0 * 0, 1 * 0, 2 * 0, 3 * 0 },

{ 0 * 1, 1 * 1, 2 * 1, 3 * 1 },

{ 0 * 2, 1 * 2, 2 * 2, 3 * 2 },

{ 0 * 3, 1 * 3, 2 * 3, 3 * 3 }

};

int i, j;

for (i = 0; i < 4; i++) {

for (j = 0; j < 4; j++)

System.out.print(m[i][j] + " ");

System.out.println();

}

}

}

Результат роботи програми:

0.0 0.0 0.0 0.0

0.0 1.0 2.0 3.0

0.0 2.0 4.0 6.0

0.0 3.0 6.0 9.0

26 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

тип [] ім’я_змінної;

int a1 [] = new int[3];

int [] a2 = new int[3];

char twooD1 [] = new char[3][4];

char [] twooD2 = new char[3][4];

В програмуванні правдиві та зустрічаються обидві форми оголошення масивів.

Альтернативні варіанти

оголошення масивів

27 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

int [] nums1, nums2, nums3;

int nums1 [], nums2 [], nums3 [];

В програмуванні правдиві та зустрічаються обидві форми оголошення масивів.

28 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Цикл for each

For-each – це різновид циклу for, який використовується, коли потрібно опрацювати всі елементи масиву або колекції.

Його синтаксис наступний:

for (type nameVar : array)

{

Блок операторів;

}

де type – тип змінної, яка буде ітеруватись (обов'язково має збігатись із типом масиву), nameVar – назва цієї змінної, array – масив (колекція), за яким здійснюється цикл.

29 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Оператор for-each

Оператор for

30 of 34

30

Клас Arrays

THE STATE EMERGENCY SERVICE OF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE

31 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Клас Arrays

Клас java.util.Arrays містить набір статичних методів для роботи з масивами. Він дозволяє спростити обробку масивів і уникнути рутинного коду.

Метод Arrays.toString()

32 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Клас Arrays

Arrays.sort() – сортування масиву

33 of 34

СТАНОМ НА 01.02.2023

Масиви в java

THE STATE EMERGENCY SERVICEOF UKRAINE

LVIV STATE UNIVERSITY OF LIFE SAFETY

Клас Arrays

Arrays.copyOf() та Arrays.copyOfRange() – копіювання масивів

Arrays.fill() – заповнення масиву

Arrays.asList() – перетворення масиву у список

34 of 34

34

Q&A SESSION