개발 공부중

[JAVA] IndexOutOfBoundsException 에러 해결 본문

JAVA

[JAVA] IndexOutOfBoundsException 에러 해결

개발자 leelee 2024. 1. 18. 23:04
상황
//문제의 코드

myList = Hanlder.selectDetailList(conn, tcBp, logger);	// 리스트 가져옴
maxSrno = Hanlder.maxSrno(conn, tcBp, logger);  // 시리얼 넘버 최대값 가져옴

Bean lastResultBp = new Bean(); 

/* java.lang.IndexOutOfBoundsException 원인
    if (maxSrno > 0) { 
        lastResultBp = (Bean) myList.get(maxSrno - 1);			
    }
*/

 

리스트로 받아오지 않게 항목을 하나 변경했더니 IndexOutOfBoundsException 에러가 났다.

 

원인

 

IndexOutOfBoundsException 에러는 배열이나 리스트에서 유효하지 않은 인덱스로의 접근 시 발생하는 예외다.

리스트에서 get(index) 했을 때 값이 없으면 생기는 오류다.

 

List<String> myList = new ArrayList<>();
myList.add("Element 1");
myList.add("Element 2");

// 1. 음수 인덱스에 접근
String element = myList.get(-1); // IndexOutOfBoundsException 발생

// 2. 자료 구조의 크기를 벗어나는 인덱스에 접근
String element = myList.get(2); // IndexOutOfBoundsException 발생

// 3. 빈 자료 구조에서의 접근 시도
List<String> emptyList = new ArrayList<>();
String element = emptyList.get(0); // IndexOutOfBoundsException 발생

 

해결방법

 

1. 인덱스 범위를 확인한다.

if (index >= 0 && index < myList.size()) {
    // 올바른 범위 내의 인덱스에 접근
    String element = myList.get(index);
} else {
    // 처리할 로직 추가 (예: 에러 핸들링)
}

 

2. 비어있는 값인지 먼저 확인한다.

if (!myList.isEmpty()) {
    // 자료 구조가 비어 있지 않은 경우에만 접근
    String element = myList.get(0);
} else {
    // 처리할 로직 추가 (예: 에러 핸들링)
}

 

 

나의 경우는 안 쓰는 값이라 주석처리 해주었다. 

 

 

끝.

Comments