개발새발

[Java] IndexOutOfBoundsException 본문

오류잡기

[Java] IndexOutOfBoundsException

칸쵸. 2023. 9. 27. 02:46
728x90

ArrayList 공부를 하며 평화로이 코드를 짜고있던 어느날...

아니 분명히 코드 창에는 아무런 문제도 없었는데 실행만 하면 자꾸 오류가 나더라

 

package pokemonArrayList;

import java.util.ArrayList;

public class PokemonArrayList {

	public static void main(String[] args) {
		
		//Pokemon 클래스를 자료형으로 받는 firePokemon ArrayList 선언 (불타입 포켓몬들만 넣을래)
		ArrayList <Pokemon> firePokemon = new ArrayList<Pokemon>();
		
		firePokemon.add(new Pokemon("가디",1));
		firePokemon.add(new Pokemon("윈디",1));
		firePokemon.add(new Pokemon("브케인",1));
		firePokemon.add(new Pokemon("마그케인",1));
		firePokemon.add(new Pokemon("블레이범",1));
		
		for(int i=0 ; i<=firePokemon.size() ; i++) {
			//Pokemon 클래스의 인스턴스 pokemon
			Pokemon pokemon = firePokemon.get(i);
			pokemon.PokemonInfo();
		}
		
		System.out.println(); //줄 띄움
		
		System.out.println("===향상된 for문 사용===");
		for(Pokemon pokemon : firePokemon) {
			pokemon.PokemonInfo();
		}

	}

}

도감번호 디테일은 중요한게 아니니까 넘어가고... 아무튼 겉보기에 아무 문제도 없어보이는 이 녀석

실행만 하면 이 난리가 났다

그래도 나 이제 에러 문구 좀 읽을 줄 안다..!

main 스레드에서 예외가 발생했다는데 그게 뭐냐면 java.lang.IndexOutOfBoundsException 이라...!!!!

 

아, 뭔가 배열의 크기에서 문제가 발생했나? 하고 보니까 이제 보인다

보이시나요? (아뇨, 걸인데요 ㅋㅋ)

 

배열의 크기를 n이라고 했을 때 인덱스는 0 ~n-1 까지라는 사실을 순간 잊고,

for문 반복 조건을 i <= firePokemon.size() 로 설정해버린 것..!

당연히 i = firePokemon.size()가 된 순간 이 친구는 갈 곳을 잃고 응애 나 아기예외 하고 에러를 낸 것이다

 

그래서 바로 수정해줬다

 

아주 출력이 잘 된다

굳굳