Есть ли способ присвоить значения в массиве с forEach? - PullRequest
0 голосов
/ 24 января 2020

Я довольно новичок в программировании и изучил forEach l oop в Java. Насколько я знаю, это более короткая версия classi c для l oop. У меня вопрос, как я могу сохранить значения в массив с forEach или это только для чтения?

int[] arr = new int[5];

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

        for (int i : arr) {
            arr[i] = i;
        }

Но мой массив [0,0,0,0,0]. (Конечно, но можно ли как-то его изменить?)

Если нет, то вместо обычного -l oop?

есть другой способ

1 Ответ

2 голосов
/ 24 января 2020

Краткий ответ: нет, нет пути.

Более длинный ответ: При каждом l oop вы теряете информацию индекса, т.е. в пределах oop вы не знаете, имеете ли вы дело с первым, вторым или сотым элементом. Вам нужен индекс для адресации позиции для записи в массиве. Так что с использованием только for-each невозможно.

Mind: В вашем примере первый l oop просто перезаписывает элементы массива своими индексами. Вы получите arr = { 0, 1, 2, 3, 4 }. Второй l oop работает только потому, что он перебирает массивы, чьи элементы являются их собственными индексами случайно - как вы уже это определили ранее.

Если ваш массив, например, был `arr = {42, 101, -73, 0, 5} 'первая итерация будет пытаться получить доступ к 43-му элементу массива только с пятью элементами, что вызовет исключение.

Вы можете создать и увеличить свой собственный индекс счетчик, но на самом деле это то, что обычные для -l oop делают очень удобным способом.

обычные для l oop:

for (int index = 0; index < arr.length; index++) {
    var element = array[index];
    use(element);
}

для-каждого l oop :

for (int element : arr) {
    // the current index is unknown here
    use(element);
}
...