Массивы
Массив — набор значений одного типа, хранящихся под одним именем. Вместо десяти переменных 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
nullnull означает «нет объекта». Вызвать метод у такого элемента нельзя — программа упадёт с ошибкой.
Перебор в цикле
Массивы почти всегда обрабатывают в цикле. Обычный 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().