next()와 nextLine() 차이

최은창·2024년 1월 25일

공부용

목록 보기
2/2
post-thumbnail

결론


next(),nextInt()는 입력 받을때 \n(엔터)가 입력되면 \n(엔터) 앞의 값들을 가져간다.

nextLine()은 입력 받을때 \n(엔터)를 만나면 버퍼에 쌓인 값들을 가져간다.

본론


import java.util.Scanner;

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

        System.out.print("숫자1을 입력하시오 :" );
        int n1 = scanner.nextInt();
        System.out.println("입력된 숫자1 :" + n1);
        System.out.println();

        System.out.print("숫자2을 입력하시오 :" );
        int n2 = scanner.nextInt();
        System.out.println("입력된 숫자2 :" + n2);
        System.out.println();

        System.out.print("숫자3을 입력하시오 :" );
        int n3 = scanner.nextInt();
        System.out.println("입력된 숫자3 :" + n3);
        System.out.println();

위 경우 nextInt()를 통해 값을 출력하면 다음과 같다.

엔터를 쳐도 숫자를 정확하게 받는다

여기에 next() 함수를 추가하여 글자 값을 받으면

//위 코드에 추가
		System.out.print("글자를 입력하시오 :");
        String str_ex = scanner.next();
        System.out.println("입력된 글자 :" + str_ex);
        System.out.println();

위 그림처럼 결과들이 잘 표현이 된다.

그런데 여기서 nextLine()을 추가하면 다음과 같이 된다.

// 위 코드에 추가
		System.out.print("문자1를 입력하시오 :");
        String str1 = scanner.nextLine();
        System.out.println("입력된 문자1 :" + str1);
        System.out.println();

        System.out.print("문자2를 입력하시오 :");
        String str2 = scanner.nextLine();
        System.out.println("입력된 문자2 :" + str2);
        System.out.println();

        System.out.print("문자3를 입력하시오 :");
        String str3 = scanner.next();
        System.out.println("입력된 문자3 :" + str3);
        System.out.println();

문자 1을 입력하는곳에 바로 엔터가 넘겨지면서 다음 문자2를 입력 하라고 한다.

이는 문자를 입력받을때 버퍼를 이용하게 되는데

버퍼에 글자고 쌓이고 \n값을 입력받으면 입력받은 값이 넘겨지게 된다.

이때 next()nextInt()는 형식에 맞는 값을 입력받을때 \n을 제외한 값들만 넘겨주고 버퍼에 \n만 남기게 된다.

계속 next()nextInt()만 사용하면 문제가 되지는 않는다.

하지만 이후 nextLine() 쓰게 된다면 버퍼에 남아있는 \n을 만나 nextLine()은 \n를 출력하고 값을 넘기게 된다.

위 결과 처럼 되지 않으려면
nextInt()next()를 사용후 다음 줄에 바로 nextLine()을 쓰거나 next(), nextInt()만 사용하자

profile
비슷한 어려움을 겪는 누군가에게 도움이 되길

0개의 댓글