백준 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++;
}
}