Расширенный цикл for вызывает исключение ArrayIndexOutOfBoundsException

java loops

1703 просмотра

2 ответа

Вот мой код:

import java.util.Scanner;

public class Arrays {
    public static void main(String[] args) {
        Arrays psvm = new Arrays();
        psvm.start();
    }

    public void start() {
        Scanner ben = new Scanner(System.in);
        int[] arr = new int[4];
        int[] arrs = new int[4];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = ben.nextInt();
        }
        check(arr, arrs);
    }

    public void check(int arr[], int arrs[]) {
        for (int i = 0; i < arr.length; i++) {
            arrs[i] = arr[i];
        }
        for (int i : arrs) {
            System.out.println(arrs[i]);
        }
    }
}

Расширенный forцикл дает ArrayIndexOutOfBoundsException:

for (int i : arrs) {
    System.out.println(arrs[i]);
}

Пока этот forоператор цикла работает. Почему? Что не так с кодом?

for (int i = 0; i < arrs.length; i++) {
    System.out.println(arrs[i]);
}
Автор: Mob Источник Размещён: 13.11.2019 11:32

Ответы (2)


13 плюса

Решение

В этом случае iбудет назначен каждый элемент в массиве - это не индекс в массиве.

Что вы хотите сделать, это:

for(int i : arrs)
{
    System.out.println(i);
}

В вашем коде вы пытаетесь выбрать целое число в индексе массива, на который ссылается объект итерации. Другими словами, ваш код эквивалентен:

for(int idx = 0; idx < arrs.length; idx++)
{
    int i = arrs[idx];
    System.out.println(arrs[i]);
}
Автор: Edward Thomson Размещён: 11.08.2011 09:37

0 плюса

Для этого блока кода вы написали:

for (int i : arrs) {
   System.out.println(arrs[i]);
}

Вы можете поместить индексную переменную вне цикла, затем вы можете использовать индекс для вывода значений индексов массива. Просто убедитесь, что вы увеличиваете, когда ваша работа выполнена для этого индекса.

Посмотрите ниже:

int index = 0;
for (int i : arrs) {
   System.out.println(arrs[index]);
   index++;
}
Автор: rlima1877 Размещён: 08.11.2019 07:28
Вопросы из категории :
32x32