Могу ли я объявить и инициализировать массив с той же инструкцией в Java? - PullRequest
1 голос
/ 06 августа 2010

Есть ли способ сделать следующее одновременно?

static final int UN = 0; // uninitialized nodes
int[] arr;

// ... code ...

arr = new int[size];
for (int i = 0; i < 5; i++) {
    arr[i] = UN;
}

По сути, я хочу объявить arr, как только я знаю, каков будет его размер, и инициализировать его как UN без необходимости зацикливания. Вот как то так:

int[] arr = new int[size] = UN;

Возможно ли это?

Спасибо.

Ответы [ 7 ]

4 голосов
/ 06 августа 2010
Arrays.fill(arr, UN);
1 голос
/ 06 августа 2010

Ну, в случае объектов (или примитивов с автобоксом) вы можете сделать следующее:

int count = 20;
final int UN = 0;
Integer[] values = Collections.nCopies(count, UN).toArray(new Integer[count]);

Недостатком является то, что вы должны использовать объектные формы примитивов (поскольку коллекции должны быть объектами), и отдельный список будет создан, а затем отброшен. Это позволит вам создать массив как один оператор.

1 голос
/ 06 августа 2010

Вам не нужно инициализировать их с 0. int по умолчанию уже 0.

Просто

int[] array = new int[size];

достаточно. Это дает вам массив нулей заданной длины. Если бы это был Integer[], это был бы массив null с.

0 голосов
/ 06 августа 2010

Нет, не со стандартными библиотеками.Однако, если вы пишете свои собственные функции, вы можете легко сделать это в одном выражении (не в инструкции; это разные).Моя выглядит как String[][] strings = Arrayu.fill(new String[x][y], "");

Вот ссылка .Там тоже есть немного хлама;Я только что опубликовал копию текущего источника напрямую, без очистки.

0 голосов
/ 06 августа 2010
int arr[] = { 0, 0, 0, 0, 0 };
0 голосов
/ 06 августа 2010

Нет.

Следующий вопрос?

0 голосов
/ 06 августа 2010

Упс, прочитайте ваш вопрос лучше:

Вы можете создать массив следующим образом:

int[] arr = new int[] {UN, UN, UN, UN, UN};

Но, конечно, если вы не знаете размер во время компиляции, тогдачтобы сделать цикл.Вторая техника невозможна.

...