본문 바로가기

Dev. Debug/프로그램

ArrayIndexOutOfBoundsException - 배열 크기(범위) 에러

ArrayIndexOutOfBoundsException 은 언제 발생하는가?

너무도 당연할 말이지만, 배열의 범위 값에 문제가 있을 때에 발생한다.


다음의 예제는 배열을 이용하여 10진수를 2진수로 바꾸는 예제이다.




위의 예제를 실행하면 정상 출력값은, Interger 최대값 / 350의 2진수 값/ -350의 2진수 값을 예상할 수 있다.

그러나, 본 예제를 실행했을 때 출력되는 것은 다음과 같은 오류였다... 


첫째로, BitShift10To2.showsb 가 잘못되었다고 한다. 다시 그 부분을 자세히 보자.



20 라인은 스트링 버퍼의 append 메서드를 이용하여 값을 추가하고 있는 부분이다.

흠, 이 부분은 괜찮은 것 같은데... 좀 더 위를 보니 for 문의 시작값과 끝값이 나와 있다.


문제점이 보이는가?

센스 있는 개발자라면 한 눈에 문제를 파악했을 것이다. 

하지만, 나는 센스가 있는 편은 아니기에 b.length 값(32)을 다시 확인해 보았다.

현재 for문의 시작값은 32, 종료값은 0이다. 즉 for문은 33번 반복되는 것이다.


이제 좀 감이 잡히는가?

배열의 크기는 32인데, 반복문은 33번 돌려고 해서 ArrayIndexOutOfBoundsException 이 발생하는 

것이다. 따라서, 다음과 같이 시작값 - 1을 하여서 32부터 시작한다면 문제는 해결되는 것이다.