728x90
자판기 프로그램 코드를 짜다가 예외가 발생 했다.
구선생에게 물어보니, 배열을 벗어났다는 의미더라.
아래의 코드를 확인해보자.
한참을 곰곰히 생각해보니, 잘못된 코드였다.
만약에 입력을 100으로 해서 num에 100이 저장되었다.
mCnt[99] == 0 ? 라는 조건식이 되는데,
애초에 mCnt[99] 는 존재 하지 않는 배열 이다.
아래를 확인해보자.
해당 배열의 길이는 아무리 커봤자 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 |