in.nextInt() 는 다음과 같이 동작합니다
* whitespace 가 아닌 글자가 나올 때 까지 읽어들여 버린다
* whitespace 가 나올 때 까지 읽어서 버퍼에 저장한다. 이 때, whitespace 를 발견하면 읽지 않고 그대로 냅둔다
* 버퍼에 저장되어 있는 문자열을 int로 변환한 뒤 반환한다.
nextInt() 를 사용하면 정수 끝에 있는 newline (\n) 을 처리하지 않고 냅둡니다.
그 다음 따라오는 nextLine() 입장에서는 시작하자마자 newline 을 보게 되므로, "빈 줄" 하나를 읽어들인 것으로 받아들이게 됩니다.
이 문제를 해결하는 가장 정석 방법은 모든 입력을 nextLine() 으로 읽고, 필요한 부분에서 형변환을 하는 것입니다.
수정하신 코드는 이 방법을 따르고 있습니다.
khseob0715 7년 전
원래 8-9 라인이
int num = in.nextInt();
이었습니다.
그럴경우 문제의 예제를 넣어보면
is NEUTRAL
이런식으로 맨 앞에 아무것도 없는 경우의 is NEUTRAL이 나오게 됩니다.Algorithm Crunching Man is GOOD
Green Lantern is GOOD
Boba Fett is A BADDY
Superman is NEUTRAL
Batman is A BADDY
Green Goblin is GOOD
Barney is A BADDY
정확한 이유가 궁금합니다.
그리고 아래와 같이 바꾸고 해결하였는데요 이 방법말고 다른 방법이 있는지 궁금합니다.