Инициализация массива в Java с помощью 'усовершенствованного' для каждого цикла [дубликат]

21
задан Corleone 31 March 2010 в 21:01
поделиться

5 ответов

Нет, поскольку вы не назначаете массив, вы назначаете временную переменную с именем 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.
}
27
ответ дан 29 November 2019 в 21:05
поделиться

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

0
ответ дан 29 November 2019 в 21:05
поделиться

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

2
ответ дан 29 November 2019 в 21:05
поделиться

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

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

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

Обратите внимание на последний абзац.

1
ответ дан 29 November 2019 в 21:05
поделиться

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

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

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

Очевидно, что это не тот случай, для которого предназначен цикл foreach. Для решения вашей проблемы я бы предложил использовать "традиционный" цикл for:

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

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

4
ответ дан 29 November 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: