[Java] Array Index Out Of Bounds Exceptions (백준 1152번)

Jina·2023년 7월 24일
0

Java

목록 보기
7/13

백준 1152번 을 풀다가, 예제가 제대로 출력되어 채점을 돌렸는데, 런타임 에러가 나왔다.

처음 제출한 코드

import java.io.*;

public class Main {

    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws IOException {

        int i=0;
        int count = 0;

        // 문장을 공백으로 구분해서 저장
        String input[] = br.readLine().split(" ");

        // 문자열이 공백으로 '시작'하면, count 해서 총 단어 수에서 차감
        while(input[i++].equals("") ){
            count ++;
        }
        
        
        // 단어 수 출력
        System.out.println( input.length - count);
    }

}

꽤 긴 시간 고민해보다가, intellJ에서 문자열에 아무것도 입력하지 않고 엔터만 눌렀더니 드디어?오류가 발생했다!

오류 분석

오류가 난 부분은 문장이 공백으로 시작되면, 그 공백을 단어 수에서 제외하도록 한 부분이었다.

            while (input[i].equals("")) {
                count++;
                i++;
            }

그런데 아무것도 입력되지 않아도 공백으로 시작되는 것이기 때문에, while문의 조건이 만족되어 i=1이 된다.
따라서 다음번 .equals 부분이 실행될 때 input[1]을 찾게 되는데
현재 iinput은 길이가 0이므로 Array Index Out Of Bounds 오류가 발생하는 것!

해결

따라서 문장의 길이가 0 이상인지 확인하는 if문을 추가했더니 정상적으로 동작했다.

if(input.length > 0) {
            while (input[i].equals("")) {
                count++;
                i++;
            }
       }

0개의 댓글

관련 채용 정보