Hytale Modding
Основи Java

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]); // "Василь"

Візуальне представлення

Індекс012
Значення"Анна""Богдан""Василь"

Зміна значень масиву

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 є простішим і безпечнішим, але ви не можете змінювати масив або дізнатися поточний індекс.

// Коли потрібен індекс
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

Візуальне представлення

012
0123
1456
2789

Проходження циклом по двовимірних масивах

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];
}