[Java] Scanner의 next...() 메서드 줄바꿈 주의점

MSU·2023년 12월 11일

JAVA

목록 보기
22/28

이름과 나이를 입력받아 출력하는 코드를 아래와 같이 짰다고 했을 때,

package scanner.ex;

import java.util.Scanner;

public class ScannerEx6 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while(true){
            System.out.print("이름을 입력하세요 (종료를 입력하면 종료): ");
            String myName = scanner.nextLine();

            if(myName.equals("종료")){
                System.out.println("프로그램을 종료합니다.");
                break;
            }

            System.out.print("나이를 입력하세요: ");
            int myAge = scanner.nextInt();

            System.out.printf("입력한 이름: %s, 나이: %d\n", myName, myAge);
        }
    }
}

아래와 같이 결과를 출력하는 구문과 이름을 입력받는 구문이 붙어서 출력된다.

왜냐하면 아래와 같은 절차로 프로그램이 실행되기 때문이다.

  • 나이를 입력받는 부분에서 사용자로부터 입력을 받을 때 50을 입력받는다치면 50을 입력한 후 엔터를 치면서 사용자 입력값으로 +\n을 입력받게 된다.
  • nextInt()메서드의 경우 \n을 제외하고 값만 받아오기 때문에 시스템(?)상으로는 \n이 남아있게 된다.
  • 반복문을 다시 실행하면서 이름을 입력받으려 할때 남아있던 \nnextLine()메서드가 한줄을 입력받은걸로 인식하고 바로 다음줄로 넘어가게 된다(myName의 값은 ""빈문자가 된다.)

2번째 반복부터 이름을 받는 구문이 스킵된것처럼 보이고 바로 나이를 입력받는 것처럼 프로그램이 실행되는 것이다.


따라서 이를 해결하기 위해서는 나이를 입력받는 구문 아래에 nextLine()메서드를 추가해서 한 줄을 입력받게 하면 된다.

            System.out.print("나이를 입력하세요: ");
            int myAge = scanner.nextInt();
            scanner.nextLine();

            System.out.printf("입력한 이름: %s, 나이: %d\n", myName, myAge);

출처 : 김영한의 자바 입문 - 코드로 시작하는 자바 첫걸음
profile
안드로이드공부

0개의 댓글