Как перебрать массив с индексом
Короткий ответ
Обычный цикл for даёт и индекс, и значение:
void main() {
String[] fruits = {"apple", "banana", "cherry"};
for (int i = 0; i < fruits.length; i++) {
IO.println(i + ": " + fruits[i]);
}
}Результат:
0: apple
1: banana
2: cherryТолько значения
Если индекс не нужен, for-each короче и не даёт ошибиться с границами:
void main() {
String[] fruits = {"apple", "banana", "cherry"};
for (String fruit : fruits) {
IO.println(fruit);
}
}Результат:
apple
banana
cherryЧерез поток
IntStream.range() перебирает индексы в стиле потоков:
void main() {
String[] fruits = {"apple", "banana", "cherry"};
IntStream.range(0, fruits.length)
.filter(i -> i % 2 == 0)
.forEach(i -> IO.println(i + " " + fruits[i]));
}Результат:
0 apple
2 cherryС конца
Для обхода с конца начните с length - 1:
void main() {
int[] numbers = {1, 2, 3};
for (int i = numbers.length - 1; i >= 0; i--) {
IO.print(numbers[i] + " ");
}
IO.println();
}Результат:
3 2 1Частая ошибка
Использовать условие i <= length. Последний индекс массива — length - 1:
void main() {
int[] numbers = {1, 2, 3};
for (int i = 0; i <= numbers.length; i++) {
IO.println(numbers[i]);
}
}Результат:
1
2
3
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3Функции из этого ответа
- IntStream.range() — Создаёт поток целых чисел из диапазона.
- for — Цикл со счётчиком или перебор всех элементов массива и коллекции (for-each).
- Iterable — Интерфейс всего, что можно обойти циклом for-each.