본문 바로가기
컴퓨터/Java

[java] java.lang.ArrayIndexOutOfBoundsException 원인 및 해결방법 - 배열 정렬 및 최대값, 최소값 구하기

by HanJoohyun 2017. 11. 19.
반응형

 

 

 

안녕하세요 한주현입니다.

 

오늘은 자바 프로그래밍 시 자주 보게되는 오류 중 하나인,

 

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 이 발생한 원인과 해결방법,

배열의 정렬, 최대값, 최소값을 구하는 방법에 대하여 알아봤습니다.


여러분들께 도움이 되셨음 좋겠습니다 ㅎㅎ.


다들 열공하시고!


그럼 다음 시간에 만나요!

 

 

 


반응형

댓글