Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как перебрать массив с индексом

Короткий ответ

Обычный цикл 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.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.