목적 

배열에 저장되어 있는 정수 중 짝수만 출력

 

 

문제 

package chap1;

public class EvenNumberFinder {
    public static void main(String[] args) {
        int[] intArray = {3,4,7,10,15,20};

        for(int i : intArray){
            if(intArray[i] % 2 == 0) System.out.println(intArray[i]);
            else continue;
        }
    }
}

// 에러 메세지
10
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 
Index 7 out of bounds for length 6
	at chap1.EvenNumberFinder.main(EvenNumberFinder.java:8)

 

 

문제 원인 

위의 for-each문은 변수 i에 배열의 값을 하나씩 할당하며 반복한다.

그러므로 조건문에서 `intArray[i]`는 배열의 값을 인덱스 번호로 인식하고 해당 위치의 값을 출력하는 것이다.

예를 들어, 가장 첫 번째 반복에서는 intArray[0]의 값인 3이 출력되어야 하지만, 3이 `i`에 저장되어 intArray[3]을 출력한다.

배열의 크기는 6인데 세 번째 반복에서 intArray[7]의 값을 출력하라고 명령하니까 컴파일러는 먼저 intArray[3]의 값을 무사히 출력한 후,`Index 7 out of bounds for length 6`이라는 에러 메세지를 출력하게 된다.

 

 

해결 방법

package chap1;

public class EvenNumberFinder {
    public static void main(String[] args) {
        int[] intArray = {3,4,7,10,15,20};

        for(int i : intArray){
            if(i % 2 == 0) System.out.println(i);

            else continue;
        }
    }
}