안녕하세요 한주현입니다.
오늘은 자바 프로그래밍 시 자주 보게되는 오류 중 하나인,
java.lang.ArrayIndexOutOfBoundsException
의 해결방법과 배열의 정렬, 최대값, 최소값을 구하는 방법
에 대하여 알아보겠습니다.
문제 상황
java.lang.ArrayIndexOutOfBoundsException
우리는 하나의 배열을 오름차순으로 sorting 하여,
1 2 | int[] arr1 = {1,3,5,7,9,2,4,6,8,10}; Arrays.sort(arr1); | cs |
배열의 가장 마지막에 있는 항목인 가장 큰 수를 출력하는 프로그램을 작성해 보려합니다.
1 | System.out.println("The max number in array: "+arr1[arr1.length]); | cs |
컴파일을 하고 실행을 해보니
1 2 3 4 | $ javac example1.java $ java example1 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at example1.main(example1.java:8) | cs |
다음과 같이 오류가 발생하였습니다..
컴파일은 제대로 되었으나 실행단계에서 오류가 납니다.
오류메시지는 java.lang.ArrayIndexOutOfBoundsException: 10
라고 나오는데 무슨일일까요? 전체적인 코드를 살펴보겠습니다.
해결 방법
1 2 3 4 5 6 7 8 9 10 11 | import java.util.Arrays; class example1{ public static void main(String[] args){ int[] arr1 = {1,3,5,7,9,2,4,6,8,10}; Arrays.sort(arr1); System.out.println("The max number in array: "+arr1[arr1.length]); System.out.println("The min number in array: "+arr1[0]); } } | cs |
example1.java:8 가 말해주듯 8번 라인을 살펴보니,
출력하는 arr1[arr1.length] 에서 오류가 발생한 듯 합니다.
7번 라인에서 Arrays.sort(arr1)을 통하여 배열이 sorting 되었고,
sorting 된 배열의 가장 처음과 가장 끝의 값을 가져오면, 각각 최소값, 최대값을 구할 수 있게 됩니다.
sorting 된 배열 arr1은 아래의 표와 같이 되었습니다.
Index | [0] |
[1] |
[2] |
[3] |
[4] |
[5] |
[6] |
[7] |
[8] |
[9] |
Value | 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
그런데 8번 라인에서
1 | arr1.length // 10 | cs |
는 10을 반환하게 되고
1 | arr1[arr1.length] // arr[10] | cs |
arr[10]의 값을 호출하므로 결국엔 index가 벗어나는 값을 불러오게 되어
1 2 | Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at example1.main(example1.java:8) | cs |
과 같이 java.lang.ArrayIndexOutOfBoundsException: 10 오류가 발생하게 됩니다 ㅎㅎ.
그러면 배열의 길이를 활용하여 배열의 마지막 값은 어떻게 가져 올 수 있을까요?
간단하게 1을 빼주면 됩니다 ㅎㅎ;
이렇게 하심 됩니다 ㅎㅎ
1 | arr1[arr1.length-1] | cs |
전체적 코드와 실행 결과를 살펴보겠습니다.
전체 코드
1 2 3 4 5 6 7 8 9 10 11 | import java.util.Arrays; class example1{ public static void main(String[] args){ int[] arr1 = {1,3,5,7,9,2,4,6,8,10}; Arrays.sort(arr1); System.out.println("The max number in array: "+arr1[arr1.length-1]); System.out.println("The min number in array: "+arr1[0]); } } | cs |
실행 결과
1 2 3 4 | $ javac example1.java $ java example1 The max number in array: 10 The min number in array: 1 | cs |
오늘은 java.lang.ArrayIndexOutOfBoundsException 이 발생한 원인과 해결방법,
배열의 정렬, 최대값, 최소값을 구하는 방법에 대하여 알아봤습니다.
여러분들께 도움이 되셨음 좋겠습니다 ㅎㅎ.
다들 열공하시고!
그럼 다음 시간에 만나요!
'컴퓨터 > Java' 카테고리의 다른 글
[java] 문자열에서 정수형, double형으로 바꾸는 방법, 문자열에서 기본형으로 바꾸는 방법 - String to int, double (0) | 2017.12.30 |
---|---|
[java] 정수형에서 문자열로 변환 하는 두 가지 방법 - int to String (0) | 2017.12.30 |
[java] 현재 날짜, 시간 출력 - Date, SimpleDateFormat 클래스 (0) | 2017.12.25 |
[java] 배열 랜덤 섞는 방법 - [보너스!] 파이썬 리스트 랜덤 섞는 방법 (0) | 2017.12.24 |
[java] missing return statement - 원인 및 해결방법 (0) | 2017.12.21 |
댓글