05 - Масиви
Дізнайтеся, як зберігати та керувати колекціями даних за допомогою масивів.
Масиви дозволяють зберігати кілька значень одного типу в одній змінній. Уявіть масив як ряд ящиків, у кожному з яких знаходиться один предмет.
Створення масивів
Спосіб 1: Окреме оголошення та ініціалізація
int[] numbers; // Оголошення
numbers = new int[5]; // Створити масив з 5 місцямиСпосіб 2: Одночасно
int[] numbers = new int[5];Спосіб 3: З початковими значеннями
int[] numbers = {10, 20, 30, 40, 50};Після створення масиву його розмір є фіксованим. Ви не можете додавати або видаляти елементи пізніше!
int[] inventory = new int[9]; // Завжди має рівно 9 місцьДоступ до елементів масиву
Масиви використовують індексні номери, починаючи з 0:
String[] players = {"Анна", "Богдан", "Василь"};
System.out.println(players[0]); // "Анна"
System.out.println(players[1]); // "Богдан"
System.out.println(players[2]); // "Василь"Візуальне представлення
| Індекс | 0 | 1 | 2 |
|---|---|---|---|
| Значення | "Анна" | "Богдан" | "Василь" |
Зміна значень масиву
int[] health = {100, 80, 90};
health[1] = 60; // Змінити здоров'я Богдана на 60
System.out.println(health[0]); // 100
System.out.println(health[1]); // 60
System.out.println(health[2]); // 90Довжина масиву
Використовуйте .length, щоб отримати розмір масиву:
int[] scores = {45, 67, 89, 92, 55};
System.out.println(scores.length); // 5Зверніть увагу, що тут немає дужок! Тут array.length, а не array.length().
Проходження циклом по масивах
Використання циклу for
String[] items = {"Меч", "Щит", "Зілля"};
for (int i = 0; i < items.length; i++) {
System.out.println(items[i]);
}Використання розширеного циклу for (for-each)
String[] items = {"Меч", "Щит", "Зілля"};
for (String item : items) {
System.out.println(item);
}Розширений цикл for є простішим і безпечнішим, але ви не можете змінювати масив або дізнатися поточний індекс.
// Коли потрібен індекс
for (int i = 0; i < items.length; i++) {
System.out.println(i + ": " + items[i]);
}
// Коли потрібні лише значення
for (String item : items) {
System.out.println(item);
}Багатовимірні масиви
Масиви можуть містити інші масиви, створюючи сітку:
int[][] grid = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
System.out.println(grid[0][0]); // 1
System.out.println(grid[1][2]); // 6
System.out.println(grid[2][1]); // 8Візуальне представлення
| 0 | 1 | 2 | |
|---|---|---|---|
| 0 | 1 | 2 | 3 |
| 1 | 4 | 5 | 6 |
| 2 | 7 | 8 | 9 |
Проходження циклом по двовимірних масивах
int[][] grid = {
{1, 2, 3},
{4, 5, 6}
};
for (int row = 0; row < grid.length; row++) {
for (int col = 0; col < grid[row].length; col++) {
System.out.print(grid[row][col] + " ");
}
System.out.println();
}Практичні приклади
Система інвентарю гравця
String[] inventory = new String[9]; // 9 слотів панелі швидкого доступу
// Додати предмети
inventory[0] = "Діамантовий меч";
inventory[1] = "Щит";
inventory[8] = "Їжа";
// Відобразити інвентар
for (int i = 0; i < inventory.length; i++) {
if (inventory[i] != null) {
System.out.println("Слот " + i + ": " + inventory[i]);
} else {
System.out.println("Слот " + i + ": Порожньо");
}
}Знайти найвищий показник
int[] scores = {45, 92, 67, 88, 55, 71};
int highest = scores[0];
for (int i = 1; i < scores.length; i++) {
if (scores[i] > highest) {
highest = scores[i];
}
}
System.out.println("Найвищий показник: " + highest);Обчислити середнє значення
double[] temperatures = {23.5, 25.0, 22.8, 24.3, 26.1};
double sum = 0;
for (double temp : temperatures) {
sum += temp;
}
double average = sum / temperatures.length;
System.out.println("Середня температура: " + average);Блок-сітка (двовимірний масив)
String[][] terrain = new String[5][5];
// Заповнити травою
for (int x = 0; x < 5; x++) {
for (int z = 0; z < 5; z++) {
terrain[x][z] = "трава";
}
}
// Розмістити каміння
terrain[2][2] = "каміння";
terrain[1][3] = "каміння";
// Відобразити сітку
for (int x = 0; x < terrain.length; x++) {
for (int z = 0; z < terrain[x].length; z++) {
System.out.print(terrain[x][z] + " ");
}
System.out.println();
}Загальні операції з масивами
Копіювання масиву
int[] original = {1, 2, 3, 4, 5};
int[] copy = original.clone();
// Або вручну
int[] copy2 = new int[original.length];
for (int i = 0; i < original.length; i++) {
copy2[i] = original[i];
}Пошук значення
String[] items = {"Меч", "Щит", "Зілля", "Лук"};
String target = "Зілля";
int foundIndex = -1;
for (int i = 0; i < items.length; i++) {
if (items[i].equals(target)) {
foundIndex = i;
break;
}
}
if (foundIndex != -1) {
System.out.println("Знайдено по індексу: " + foundIndex);
} else {
System.out.println("Не знайдено");
}Підрахунок входжень
String[] blocks = {"каміння", "ґрунт", "каміння", "трава", "каміння"};
String searchFor = "каміння";
int count = 0;
for (String block : blocks) {
if (block.equals(searchFor)) {
count++;
}
}
System.out.println(searchFor + " з'являється " + count + " раз(-ів)");Обмеження масиву
Масиви не можуть збільшуватися або зменшуватися. Якщо вам потрібна гнучкість, ви дізнаєтеся про ArrayList пізніше!
int[] numbers = new int[5];
// Не можна додати 6-й елемент!
// Якщо вам потрібно більше місця, створіть новий масив
int[] bigger = new int[10];
for (int i = 0; i < numbers.length; i++) {
bigger[i] = numbers[i];
}