Инициализация массива в Java с использованием «расширенного» для каждого цикла

Возможно ли инициализировать массив в Java, используя цикл «advanced» for?

например

Integer[ ] numbers = new Integer[20]; int counter = 0; for ( Integer i : numbers ) { i = counter++; } for ( Integer i : numbers ) { System.out.println(i); } 

Это печатает все значения NULL, почему?

Нет, потому что вы не назначаете массив, вы назначаете временную переменную i . Массив не видит изменения.

Следующий пример показывает примерно эквивалентный код, используя обычный цикл. Это должно облегчить понимание того, почему он не обновляет массив:

 for (int j = 0; j < numbers.length; j++) { Integer i = arr[j]; // i is null here. i = counter++; // Assigns to i. Does not assign to the array. } 

Причина, по которой вы получаете нулевые значения в качестве вывода, состоит в том, что вы не храните никаких значений в массиве.

Вы можете использовать цикл foreach для инициализации массива, но тогда вы должны вручную поддерживать счетчик для ссылки на элементы массива:

 for (Integer i : numbers ){ numbers[counter] = counter; counter++; } 

Ясно, что это не предполагаемый прецедент для цикла foreach. Чтобы решить вашу проблему, я бы предложил использовать «традиционный» цикл:

 for (int i = 0; i < numbers.length; i++){ numbers[i] = i; } 

Обратите внимание, что все элементы можно заполнить одним и тем же значением, используя Arrays.fill (int [] array, int val) .

В принципе нет, не так, как вы пожелаете. В цикле «advanced» for нет доступа к скрытому счетчику, и ни один из них не должен выполнять доступ на запись в соответствующем слоте массива.

«Расширенный» for-loop не предоставляет вам счетчик, и, следовательно, вы не можете записать результат counter++ в конкретный слот массива.

Ваш случай – это случай, когда «продвинутый» цикл for не создан. Видеть:

http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html

Взгляните на последний абзац.

В вашем случае вы не можете. Для каждого скрывает iterator в базовой коллекции, поэтому здесь вы не можете понять, какую позицию в «числах» вы используете, когда пытаетесь «инициализировать» массив. Это один из вариантов, для которого не создан «продвинутый» цикл.

  • Разница между выключением и выключением.
  • caseOf чувствителен к регистру?
  • Как игнорировать некоторые элементы при сравнении XML?
  • Как отключить jusched.exe в Windows 7 64-bit?
  • Замена текста в Apache POI XWPF
  • Найти элементы внутри форм и iframe с помощью Java и Selenium WebDriver
  • Создание треугольника с петлями
  • NoClassDefFoundError: неправильное имя
  • Как добавить элементы в общую коллекцию подстановочных знаков?
  • Как правильно конвертировать из CMYK в RGB в Java?
  • подключение к общей папке в windowsх с помощью java
  • Давайте будем гением компьютера.