inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

문자열 입/출력

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

해결된 질문

276

형씌

작성한 질문수 13

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);
    }
}

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

java

답변 1

2

널널한 개발자

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

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

 

 

1

형씌

답변 감사합니다.

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

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

1

널널한 개발자

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

문제 리스트 페이지

0

12

1

part8 Notion 링크

0

10

1

채점 사이트 관련 질문드립니다

0

14

1

인텔리제이 MCP 서버 설정 관련

0

16

1

조회속도 개선에서 더 개선하는 방법이 궁금합니다.

0

22

2

필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)

0

30

2

질문있습니다

0

23

1

1번 문제 질문입니다.

0

29

1

26년 1회 실기 해설 강의

0

48

2

음악플레이어 문제 중 코드질문

0

24

1

스크립트 논리곱 설명이 틀린것 같네요

0

55

2

버스요금 계산 실제 예제에 오탈자

0

81

2

"인스턴스" 용어에 대해 질문드립니다.

0

170

1

인스턴스 변수와 클래스 변수

1

126

2

식별자로 '$' 문자 사용

0

80

2

강의 내용에서 궁금한 부분이 있어 질문 드립니다:)

0

144

2

cmd 글꼴변경

0

210

2

인코딩시 Modified UTF-8만 일어난다 보아도 될까요?

0

156

2

[필수실습 12-3] *출력 놀이 응용 질문

0

145

2

c,c++로 만든 프로그램을 실행한 프로세스

0

173

2

javac.exe나 java.exe

0

202

1

널널한 개발자님~ 변수명을 한글로 시도하지 말라고하셨는데요

0

510

1

[오류 검토 요청]

0

243

2

[오류 검토 요청]

0

225

2