본문 바로가기
Exception (예외)/Java

NullPointerException (예외)

by Hwanii_ 2023. 5. 13.
728x90

Exception (예외)

오류 멈춰

: null 에러가 발생한 모습

 

상황

 

1. 객체 3개를 data라는 이름의 배열로 만듦.

2. 사용자로부터 1번 입력을 받아 메뉴를 추가.

3. 현재 생성된 메뉴 목록을 보기 위해 사용자로부터 2번 입력을 받아 메뉴를 출력.

 

data 이름의 객체배열을 i < data.length 까지 루프하면서 메뉴를 출력하겠다는 것인데,

data.length는 배열 공간의 크기를 의미한다.

즉, 3개의 객체를 저장할 배열을 만들었기 때문에 배열 공간의 크기는 현재 3이다.

for문의 조건식 0 < 3 이고, 0, 1, 2 총 세번을 반복하는데,

만약에 입력한 메뉴가 1개밖에 없으면 data[1], data[2] 는 객체가 존재 하지 않다는 말이 된다.

 

아래의 그림을 보자.

상품의 이름 : 맥주

상품의 가격 : 5000

을 입력했다.

객체를 1개만 생성시켰으므로, data[0]에만 객체가 존재 하는 상황 이다.

이때, 배열의 길이만큼 printInfo() 메서드를 호출하면

data[1], data[2] 객체가 존재하지 않는데 ? 가 되버리는 것이다.

 

결론

 

 

for문의 조건식을 i < index; 로 잡아주면 해결 !

 index는 배열의 공간의 길이가 아니라, 배열의 인덱스 그 자체를 의미 한다.

int index = 0; 으로 초기값을 잡아줬고, 

메뉴를 입력받을때마다 index++; 이 되는 상황이다.

 

 즉, 메뉴 한개 입력 끝나면, index는 1이 되어

for(int = 0; i < 1; i++) 이 되므로, for문의 조건식이 참이라 한번 루프를 하는 상황이 되고,

data[0].printInfo(); 를 하면 아래와 같이 출력이 되어 에러가 해결됬음을 확인 할 수 있다.

 

 

반응형

'Exception (예외) > Java' 카테고리의 다른 글

NullPointerException (예외)  (0) 2023.08.21
NoSuchElementException (예외)  (0) 2023.05.20
IndexOutOfBoundsException (예외)  (0) 2023.05.20
IndexOutOfBoundsException (예외)  (0) 2023.05.08