khseob0715   4년 전

원래 8-9 라인이

int num = in.nextInt();

이었습니다.


그럴경우 문제의 예제를 넣어보면

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

이런식으로 맨 앞에 아무것도 없는 경우의 is NEUTRAL이 나오게 됩니다.

정확한 이유가 궁금합니다.

그리고 아래와 같이 바꾸고 해결하였는데요 이 방법말고 다른 방법이 있는지 궁금합니다.

bupjae   4년 전

in.nextInt() 는 다음과 같이 동작합니다

* whitespace 가 아닌 글자가 나올 때 까지 읽어들여 버린다

* whitespace 가 나올 때 까지 읽어서 버퍼에 저장한다. 이 때, whitespace 를 발견하면 읽지 않고 그대로 냅둔다

* 버퍼에 저장되어 있는 문자열을 int로 변환한 뒤 반환한다.


nextInt() 를 사용하면 정수 끝에 있는 newline (\n) 을 처리하지 않고 냅둡니다.

그 다음 따라오는 nextLine() 입장에서는 시작하자마자 newline 을 보게 되므로, "빈 줄" 하나를 읽어들인 것으로 받아들이게 됩니다.


이 문제를 해결하는 가장 정석 방법은 모든 입력을 nextLine() 으로 읽고, 필요한 부분에서 형변환을 하는 것입니다.

수정하신 코드는 이 방법을 따르고 있습니다.

khseob0715   4년 전

오... 제대로 이해가 됬습니다. 감사합니다.

댓글을 작성하려면 로그인해야 합니다.