1
ЛЕКЦІЯ №5.
Створення та обробка елементарних структур
даних (масиви)
Викладач: PhD, Юлія Назар
Програмування на java
agenda
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
STATE SERVICE OF EMERGENCY SITUATIONS IN UKRAINE
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
СТАНОМ НА 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
Масиви – це зручний спосіб групування однотипної інформації (елементарна структура даних).
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Для того, щоб створити масив, необхідно оголосити тип та ім’я масиву.
Форма оголошення масиву:
тип ім’я_змінної [];
де параметр тип зазначає тип даних усіх елементів масиву.
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Для того щоб зв’язати оголошений масив з масивом однотипних значень, потрібно зарезервувати область пам’яті з допомогою оператора new та задати її адресу оголошеному масиву (виділення пам’яті під масив). Загальна форма резервування пам'яті для масиву:
ім’я_масиву = new тип [розмір];
тип ім’я_масиву [];
де тип – тип даних, для яких резервується пам’ять; розмір – кількість елементів в масиві
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
для того щоб скористатись оператором new для резервування пам’яті, необхідно зазначити тип та кількість елементів, для яких резервується пам'ять
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Елементи масиву, для яких було виділено пам'ять, будуть автоматично ініціалізовані:
СТАНОМ НА 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];
СТАНОМ НА 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;
}
}
СТАНОМ НА 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 день(днів)
СТАНОМ НА 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 };
СТАНОМ НА 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] + " день(днів)");
// . . .
}
}
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Коли застосовують другий варіант ініціалізації масиву?
коли чітко відомо остаточну кількість елементів масиву та те, що значення елементів масиву не будуть змінюватись (масив є статичним)
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Слід пам’ятати, що за умови звернення до визначеного елемента масиву керуюча система Java здійснює перевірку чи зазначений в запиті індекс відповідає діапазону існуючих елементів. Будь-яка спроба звернутись до елемента масиву за межами його діапазону призведе до помилки при виконанні програми.
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Метод .length повертає довжину масива.
Його синтаксис наступний:
ім’я масива . length
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
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
При оголошенні змінної багатовимірного масиву для зазначення кожного додаткового індексу використовують окремий ряд квадратних дужок.
int twoD[][] = new int[4][5];
СТАНОМ НА 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
СТАНОМ НА 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];
СТАНОМ НА 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
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Можливість динамічного визначення довжини кожного виміру масиву можливе за рахунок того, що в багатовимірних масивах кожен вимір розцінюється як окремий масив в масиві (масив масивів).
СТАНОМ НА 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
СТАНОМ НА 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];
В програмуванні правдиві та зустрічаються обидві форми оголошення масивів.
Альтернативні варіанти
оголошення масивів
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
int [] nums1, nums2, nums3;
int nums1 [], nums2 [], nums3 [];
В програмуванні правдиві та зустрічаються обидві форми оголошення масивів.
СТАНОМ НА 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 – масив (колекція), за яким здійснюється цикл.
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Оператор for-each
Оператор for
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
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Клас Arrays
Клас java.util.Arrays містить набір статичних методів для роботи з масивами. Він дозволяє спростити обробку масивів і уникнути рутинного коду.
Метод Arrays.toString()
�
СТАНОМ НА 01.02.2023
Масиви в java
THE STATE EMERGENCY SERVICEOF UKRAINE
LVIV STATE UNIVERSITY OF LIFE SAFETY
Клас Arrays
Arrays.sort() – сортування масиву
СТАНОМ НА 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
Q&A SESSION