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

IndexOutOfBoundsException (예외)

by Hwanii_ 2023. 5. 8.
728x90

자판기 프로그램 코드를 짜다가 예외가 발생 했다.

멈춰 오류 ..

구선생에게 물어보니, 배열을 벗어났다는 의미더라.

 

아래의 코드를 확인해보자.

한참을 곰곰히 생각해보니, 잘못된 코드였다.

만약에 입력을 100으로 해서 num에 100이 저장되었다.

mCnt[99] == 0 ? 라는 조건식이 되는데,

애초에 mCnt[99] 는 존재 하지 않는 배열 이다.

 

아래를 확인해보자.

mCnt[i] = rand.nextInt(11). 즉, 배열이 0개에서 10개 까지 랜덤으로 만들어진다는 의미.

 

해당 배열의 길이는 아무리 커봤자 10이기 때문에, 오류가 뜨는 것이다.

 

배열의 범위를 벗어나므로

우선적으로 입력값이 1 ~ 4 사이로만 가능하다는 조건을 받고 나서,

이 조건을 적어야 한다.

조건의 우선순위를 생각해보자.

 

if((1 <= num && num <= n) && (mCnt[num-1] > 0)) {		
					break;										
}												
																
	if(num < 1 || n < num) {							
		System.out.println("없는 상품입니다 !");			
	}
	else if(mCnt[num-1] == 0) {						
		System.out.println("재고가 없어서 구매가 불가능합니다 !");
	}

 

느낌으로 수정해줘야 할듯 하다.

 

저 코드 에서 짚고 넘어가야할 부분은 연산자 우선순위 이다.

 

만약에 num이 100이면

 

1 <= 100 && 100 <= n 이다.

T && F 이기 때문에 F가 된다.

이미 F이기 때문에 뒤는 읽지도 않고 조건식이 F가 되어 버린다.

반응형

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

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