05 - Массивы
Вы узнаете, как хранить и управлять наборами данных с помощью массивов.
Массивы позволяют хранить несколько значений одного типа в одной переменной. Представьте себе массив как множество коробок, в каждой из которых находится предмет.
Создание Массивов
Метод 1: Объявлять и инициализировать по отдельности
int[] numbers; // Объявим массив
numbers = new int[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; // Значение здоровья Боба было изменено с 80 на 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Обратите внимание, мы не используем скобки после lengh! Мы пишем 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 |
Зацикливание 2D массивов
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] = "Diamond Sword";
inventory[1] = "Shield";
inventory[8] = "Food";
// Просмотриваем инвентарь
for (int i = 0; i < inventory.length; i++) {
if (inventory[i] != null) {
System.out.println("Slot " + i + ": " + inventory[i]);
} else {
System.out.println("Slot " + i + ": Empty");
}
}Найти максимум среди чисел в массиве
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);Блочная сетка (2D массив)
String[][] terrain = new String[5][5];
// Заполняем ячейки травой
for (int x = 0; x < 5; x++) {
for (int z = 0; z < 5; z++) {
terrain[x][z] = "grass";
}
}
// Добавляем камень (minecraft референс)
terrain[2][2] = "stone";
terrain[1][3] = "stone";
// Просматриваем сетку
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 = {"stone", "dirt", "stone", "grass", "stone"};
String searchFor = "stone";
int count = 0;
for (String block : blocks) {
if (block.equals(searchFor)) {
count++;
}
}
System.out.println(searchFor + " appears " + count + " times")Ограничения массивов
Массивы не могут увеличиваться или уменьшаться. Если вам нужно что-то более гибкое позже вам расскажут о ArrayList!
int[] numbers = new int[5];
// Вы не можете добавить 6-ой элемент!
// Если вам нужно больше места, придётся создать новый массив
int[] bigger = new int[10];
for (int i = 0; i < numbers.length; i++) {
bigger[i] = numbers[i];
}