ArrayIndexOutOfBoundsException 원인과 해결법

Happy Bean·2022년 9월 9일

나의 에러 일지

목록 보기
1/1

원인

정해진 배열의 크기보다 크거나 음수 index에 대한 요청이 있으면 ArrayIndexOutOfBoundsException이 발생한다.

  • 배열의 index는 1부터 시작하는 것이 아닌 0부터 시작한다. 배열의 크기를 n이라고 한다면 index는 1부터 n까지가 아닌 0부터 n-1까지인 것이다. 보통 이 부분에서 해당 예외가 많이 발생하는 것 같다.
  • ArrayIndexOutOfBoundsException은 자바 컴파일러에서 검사하지 않고 실행을 시켜야 알 수 있다.
int[] arr = new int[5] // arr의 범위는 arr[0] ~ arr[4]로 총 5개의 인덱스를 생성

arr[5] = 5; // arr[5]는 존재하지 않기 때문에 예외 발생!

// 결과
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5
	at ArrTest.main(ArrTest.java:7) // Index 5는 배열의 length의 범위를 벗어났다는 뜻

해결 방법

  • 배열 범위에 맞게 값을 넣는 법을 알아보자

1. 반복문

for(int i = 0; i < arr.length; i++) { ... } // 배열의 범위만큼만 반복
int i = 0;
while(i < arr.length) { // 배열의 범위만큼만 반복
	...
	i++;
}

2. foreach문

for(int i : arr) { ... } // 배열의 범위만큼만 반복

3. try-catch문

try { // 예외가 발생할 것 같은 코드 작성
	int[] arr = new int[3];
	for (int i = 0; i < 3; i++) {
		arr[i] = i;
	}
// catch([발생할 것 같은 예외] [예외 변수 이름]) { 예외 발생 시 실행할 코드 }
} catch (ArrayIndexOutOfBoundsException e) { // ArrayIndexOutOfBoundsException가 발생하면 ArrayIndexOutOfBoundsException 출력해줘
            System.out.println(e);
} 
profile
혼자 가면 빨리 가지만, 함께 가면 멀리 간다.

0개의 댓글