Как заполнить массив значениями
Короткий ответ
Arrays.fill() записывает одно значение во все ячейки:
void main() {
int[] scores = new int[5];
Arrays.fill(scores, 10);
IO.println(Arrays.toString(scores));
}Результат:
[10, 10, 10, 10, 10]Значения по умолчанию
Новый массив уже заполнен: числа — нулями, boolean — false, объекты — null:
void main() {
IO.println(Arrays.toString(new int[3]));
IO.println(Arrays.toString(new boolean[2]));
IO.println(Arrays.toString(new String[2]));
}Результат:
[0, 0, 0]
[false, false]
[null, null]По формуле
Arrays.setAll() вычисляет значение каждой ячейки по её индексу:
void main() {
int[] squares = new int[6];
Arrays.setAll(squares, i -> i * i);
IO.println(Arrays.toString(squares));
}Результат:
[0, 1, 4, 9, 16, 25]Диапазон чисел
Массив чисел подряд проще всего получить из IntStream:
void main() {
int[] range = IntStream.rangeClosed(1, 10).toArray();
IO.println(Arrays.toString(range));
}Результат:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]Частая ошибка
Заполнить массив одним изменяемым объектом. Все ячейки ссылаются на один и тот же объект:
void main() {
StringBuilder[] lines = new StringBuilder[3];
Arrays.fill(lines, new StringBuilder());
lines[0].append("Anna");
IO.println(Arrays.toString(lines));
}Результат:
[Anna, Anna, Anna]Создайте отдельный объект для каждой ячейки: Arrays.setAll(lines, i -> new StringBuilder()).
Функции из этого ответа
- Arrays.fill() — Заполняет весь массив или его часть одним значением.
- IntStream.range() — Создаёт поток целых чисел из диапазона.