Краткий ответ: нет, нет пути.
Более длинный ответ: При каждом 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);
}