[java] Scanner / 공백때문에 출력이 안될 때

심심이·2024년 1월 22일
0

java

목록 보기
12/46

Scanner sc = new Scanner(System.in);

System.in 은 입력장치(키보드), System.out은 출력장치(모니터)이다.
Scanner은 키보드에서 입력된 문자열을 읽어들인다.

String inputStr = sc.nextLine();

sc.nextLine();은 키보드로부터 입력받은 문장을 읽어들인다.
엔터(종결신호)까지 모두 읽어들인 후 스캐너 버퍼(sc)에 담아서 아무것도 남기지 않는다.

*문자열 형변환 메소드

byte b = (byte) (Byte.parseByte(inputStr) + 10);

문자열(String)을 byte 타입으로 형변환 시켜주는 메소드=> 10이 int여서 사칙연산을 진행했을 때 값이 int로 바뀌기 때문에, 형변환해준다.

short s = (short) (Short.parseShort(inputStr) + 10);

String inputStr = sc.nextLine();
int n = Integer.parseInt(inputStr);

parseInt 쓴 이유 : 버퍼 공백으로 남아있는 데이터 제거 \

버퍼 지우는 방법

문제 발생 이유 : 키보드를 통해 입력을 받으면 내용이 버퍼라는 기억공간에 저장이 됨.

sc.nextInt(); 는 정수(int)를 읽어들이는 것인데
종결자가 공백 또는 엔터이다. 종결자(공백 또는 엔터) 앞까지의 입력해준 정수를 읽어온다.
sc.nextInt(); 를 사용하면 스캐너(sc)버퍼에는 종결자(공백 또는 엔터)가 삭제되는 것이 아니라 그대로 남아 있게 된다.

nextInt() 메서드 실행시 100<엔터>를 사용한다면,
120을 출력 뒤 버퍼에 <엔터>가 남게 된다.
-> nextLine() 은 엔터도 읽어올 수 있고, next(), nextInt()는 엔터를 제외하고 읽어온다.

즉 내용을 받아오게 되면 이 <엔터> 까지 nextLine()이 받아오게 된다.

해결 방법1)

int num = sc.nextInt();
sc.nextLine();
String str = sc.nextLine();

이런 식으로 중간에 남은 잔여물을 정리하기 위해 nextLine()으로 비워주거나,

해결 방법2)

nextInt(); 대신 Integer.parseInt(sc.nextLine());

엔터(개행문자) 까지 가져온 뒤에 어차피 버려질 수 있게 정수형으로 반환해 버리는 방법이 있다.

1번 방법으로 코드 작성 예시)

        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        String str = sc.nextLine();

        System.out.println(num1); //입력하고 enter를 치는 순간 프로그램 종료 : 엔터를 친 것이 str에 들어갔기 때문임
        System.out.println(str);
        
       

1번 방법으로 코드 작성 예시2)

        Scanner sc = new Scanner(System.in);
        int num1 = sc.nextInt();
        sc.nextLine(); //코드 비워주기 
        String str = sc.nextLine();

        System.out.println(num1);
        System.out.println(str);
profile
개발하는 심심이

0개의 댓글

관련 채용 정보