Encodera

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

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

Как заполнить массив значениями

Короткий ответ

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() — Создаёт поток целых чисел из диапазона.

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

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