작성
·
73
답변 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()
을 사용하고 이에 대한 설명이 이루어져 있습니다. 또한 가격을 입력 받은 후 nextLine()
을 호출하지 않고, 수량을 입력 받은 후에만 왜 nextLine()
을 호출해야 하는지에 대한 궁금증을 해결하는 데 도움이 될 것입니다.저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
여기서 가격 입력받을땐 scanner.nexInt가 끝이고
수량 입력받을땐 scanner.nextInt후 다음라인에
scanner.nextLine까지 있는데
왜 가격엔 scanner.nextLine가 없어도 되는건지 모르겠습니다