인프런 커뮤니티 질문&답변

Tang Kim님의 프로필 이미지
Tang Kim

작성한 질문수

김영한의 실전 자바 - 기본편

입력버퍼 nextline 관련 질문입니다

작성

·

73

0

자바 실전편 섹션3 기본형과 참조형

 

20 문제와 풀이 상품관련 프로그램 맨 마지막쪽에

사용자한테 물품 입력받을때

물품이름은 nextline로받고

가격이랑 수량은 nexint로 받아서

int로받으면 엔터할때 개행문자때문에 nextline를 하나 더 추가해준다고하셨는데

가격을 받을땐 nextint후 nexline이 없고

수량을 받을땐 nextint후 nexline가 있습니다

 

어떨땐 써주고 어떨땐 안쓰는걸까요?

답변 2

1

안녕하세요. Tang Kim님, 공식 서포터즈 y2gcoder입니다.

입력 버퍼에 남아있는 개행문자를 없애주기 위해 nextLine()을 한 번 호출해준다는 점은 이해하고 계시다고 생각하고 말씀드리고 싶습니다!

nextLine()을 주로 보시면 nextInt() 후 바로 뒤에 nextLine()으로 값을 받아야 할 때(반복문으로 인해 처음으로 되돌아가는 것 포함) 값을 받는 nextLine()을 쓰기 전에 nextLine()으로 입력 버퍼를 비워주는 것입니다! 그렇지 않으면, 남아있는 개행문자로 인해 값을 받아야 하는 nextLine()에서 저희가 새로 입력할 값이 아니라 이전에 nextInt() 처리 후에 남은 개행문자가 그 값이 입력되고 넘어가기 때문입니다 🙂

한번 예제 코드에서 nextLine()을 지워서 테스트 해보시면서 설명을 보시면 이해가 되실 거라 생각합니다!

 

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

Tang Kim님의 질문은 Java 사용 시 Scanner 클래스의 nextInt()nextLine() 메서드를 함께 사용할 때 발생하는 입력 버퍼 관련 문제에 대한 것으로 보입니다. nextInt() 뒤에 바로 nextLine()을 사용할 때 nextLine()이 엔터(개행문자)를 입력으로 인식하여 종종 예상치 못한 동작을 하는 문제에 대한 궁금증 같습니다.

자바에서 Scanner 객체의 nextInt() 메서드 사용 후 nextLine() 메서드를 호출하면 nextInt()는 정수 입력 뒤 엔터키(개행문자)를 입력 버퍼에 남겨두기 때문에 이후 nextLine() 호출 시 남아 있는 개행문자를 입력으로 간주해 버리고, 결과적으로 사용자가 의도한 문자열 입력을 건너뛰는 문제가 생깁니다.

nextInt() 이후 nextLine() 메서드가 필요 없는 경우는 nextInt()만 연속으로 사용하는 경우입니다. nextInt()는 개행문자 또는 공백 전까지의 숫자를 읽어들이고, 개행문자를 버퍼에 남겨두므로 숫자 입력 후 바로 다음 nextInt() 호출에서는 문제가 발생하지 않습니다. 하지만, 숫자 입력 후 문자열을 nextLine()으로 입력 받으려고 할 때는 버퍼에 남아 있는 개행문자 때문에 바로 들어가는 입력을 건너뛰는 현상이 발생합니다. 이를 방지하기 위해 nextInt() 다음에 nextLine()을 추가로 사용하여 입력 버퍼를 비우는 것입니다.

따라서, 사용자로부터 문자열 입력을 받기 전에 nextInt() 메서드로 숫자를 입력받았다면, 이후 nextLine()을 한 번 호출하여 입력 버퍼를 비우고 사용자로부터의 실제 문자열 입력을 정확히 받기 위한 것입니다.

이 문제에 대한 구체적인 설명과 예시가 필요하신 경우, 다음의 질문 글들에서 유사한 상황에 대한 설명을 보실 수 있습니다:

  • “NextInt 후 NextLine 쓰기” 문제에 대한 설명에서는 nextInt()사용 후 왜 nextLine()을 사용하고 이에 대한 설명이 이루어져 있습니다. 또한 가격을 입력 받은 후 nextLine()을 호출하지 않고, 수량을 입력 받은 후에만 왜 nextLine()을 호출해야 하는지에 대한 궁금증을 해결하는 데 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Tang Kim님의 프로필 이미지
Tang Kim
질문자

image

여기서 가격 입력받을땐 scanner.nexInt가 끝이고

수량 입력받을땐 scanner.nextInt후 다음라인에

scanner.nextLine까지 있는데

 

왜 가격엔 scanner.nextLine가 없어도 되는건지 모르겠습니다

Tang Kim님의 프로필 이미지
Tang Kim

작성한 질문수

질문하기