Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Массивы

Массив — набор значений одного типа, хранящихся под одним именем. Вместо десяти переменных price1, price2 и так далее заводят один массив prices. У массива фиксированная длина: её задают при создании, и потом она не меняется.

Создание массива

Тип массива записывают как тип элемента с квадратными скобками: int[], String[]. Если значения известны сразу, их перечисляют в фигурных скобках:

void main() {
    int[] scores = {90, 75, 82};
    IO.println(scores[0]);
    IO.println(scores.length);
}

Результат:

90
3

К элементу обращаются по индексу — номеру в квадратных скобках. Нумерация начинается с нуля, поэтому у трёх элементов индексы 0, 1 и 2. Поле length хранит длину массива.

Изменение элементов

Элемент массива работает как обычная переменная: ему можно присвоить новое значение по индексу:

void main() {
    String[] names = {"Анна", "Олег", "Мария"};
    names[1] = "Игорь";
    IO.println(names[0] + ", " + names[1] + ", " + names[2]);
}

Результат:

Анна, Игорь, Мария

Пустой массив нужной длины

Когда значения появятся позже, массив создают словом new с длиной в скобках. Элементы сразу получают значения по умолчанию: 0 для чисел, false для boolean, null для строк и других объектов:

void main() {
    int[] counts = new int[3];
    String[] labels = new String[2];
    counts[0] = 5;
    IO.println(counts[0] + " " + counts[1] + " " + counts[2]);
    IO.println(labels[0]);
}

Результат:

5 0 0
null

null означает «нет объекта». Вызвать метод у такого элемента нельзя — программа упадёт с ошибкой.

Перебор в цикле

Массивы почти всегда обрабатывают в цикле. Обычный for даёт индекс, for-each — сразу значения:

void main() {
    double[] prices = {4.5, 3.0, 2.5};
    double total = 0;
 
    for (int i = 0; i < prices.length; i++) {
        IO.println((i + 1) + ". $" + prices[i]);
    }
    for (double price : prices) {
        total += price;
    }
 
    IO.println("Итого: $" + total);
}

Результат:

1. $4.5
2. $3.0
3. $2.5
Итого: $10.0

Вывод массива

Чтобы вывести массив целиком, используют Arrays.toString() — он собирает все элементы в строку с квадратными скобками:

void main() {
    int[] numbers = {3, 1, 2};
    IO.println(Arrays.toString(numbers));
}

Результат:

[3, 1, 2]

Класс Arrays умеет также сортировать, копировать и сравнивать массивы — об этом урок о классе Arrays.

Частая ошибка

Если вывести массив напрямую, вместо элементов появится непонятный текст:

void main() {
    int[] numbers = {3, 1, 2};
    IO.println(numbers);
}

Результат (цифры после @ меняются от запуска к запуску):

[I@27c6e487

Это служебное описание объекта: [I означает «массив int», а дальше идёт его хеш-код. Для вывода содержимого всегда используйте Arrays.toString().

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.