강의

멘토링

로드맵

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

형씌님의 프로필 이미지
형씌

작성한 질문수

기초 탄탄! 독하게 시작하는 Java - Part 1 : 절차적 프로그래밍

문자열 입/출력

강의 1분 20초 부분에 제가 이해한 것과 조금 달라 질문 남깁니다.

해결된 질문

작성

·

247

·

수정됨

1

s.nextInt()로 int 값을 입력한 후 s.nextLine()으로 String 값을 입력하는 설명에서 제가 알고 있는 것과 달라서 질문 글을 남깁니다:)

10\nTEST\n 인 상황에서 s.nextInt()로 10과 \n을 읽고 그 다음 s.nextLine()으로 test와 \n을 읽는다고 설명을 해주셨습니다.

import java.util.Scanner;

public class Main {

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

        System.out.print("num: ");
        int num = sc.nextInt();

        System.out.print("str: ");
        String str = sc.nextLine();

        System.out.println(">> " + num + ", " + str);
    }
}

하지만 위의 코드에서 생각한 결과와 조금 다른 결과가 나오는데요.

10을 입력하고 엔터를 누르면 sc.nextInt()에 의해 10은 num에 저장됩니다. 하지만 이때 \n은 버퍼에 그대로 남아있는 상태입니다. 이때 다음 코드로 sc.nextLine()을 호출하게되면 sc.nextLine()은 \n을 읽고 str에 저장을 해버려 저희가 의도한 상황과 조금 다른 결과가 나오게 됩니다.

그래서 항상 sc.nextInt() 등등과 같은 메서드를 호출한 다음에는 버퍼에 남아있는 \n을 날리는 용도의 sc.nextLine()을 호출해야하는 것으로 알고 있습니다.

import java.util.Scanner;

public class Main {

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

        System.out.print("num: ");
        int num = sc.nextInt();
        sc.nextLine();    // 버퍼에 남아있는 \n 날리기(?)

        System.out.print("str: ");
        String str = sc.nextLine();

        System.out.println(">> " + num + ", " + str);
    }
}

아직 자바 공부에 대한 깊이가 부족하여 제가 이해한 것에 대한 설명이 적절한지 의문이 들지만 혹시 틀린 부분이 있다면 알려주세요:)

답변 1

2

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

결과적으로 말씀드리면...제가 PPT자료를 잘못만든 탓입니다.
'\n'은 whitespace이자 입력 값의 구분자가 될 수 있으나 사용자가 문자열 중간에 임의로 넣을 수 없으며 Enter키 입력으로 완료하는 과정에서만 입력 스트림에 추가됩니다. 그런데 제가 그걸 굳이 구분자의 예로 넣은 것은 결과적으로 오류입니다. 무엇보다 구분자(Whitespace)를 제거하는 것으로 설명한 부분은 명백한 오류에 해당합니다. 중요한 문제로 판단되므로 오늘 중으로 즉시 내용을 수정하고 강의를 업데이트 하겠습니다.

그리고 감사의 뜻으로 '독하게 시작하는 Java - Part 2'를 무료로 수강하실 수 있도록 조치하겠습니다.
cx8537@naver.com으로 인프런 가입 메일계정을 알려주시기 바랍니다. 감사합니다. 😄

 

 

형씌님의 프로필 이미지
형씌
질문자

답변 감사합니다.

우선 널널한 개발자님의 자바 시리즈를 끝까지 완주하기로 계획을 잡아서 Part 2강의는 이미 수강신청을 한 상태입니다ㅎㅎ

질문에 대한 빠른 답변과 업데이트 감사합니다:)

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

아하~! 그렇군요. 그렇다면 현재 제작 중인 Part 3를 제공해드리겠습니다. 그러므로 '꼭' 메일 주시기 바랍니다. 😄

형씌님의 프로필 이미지
형씌

작성한 질문수

질문하기