JAVA
[JAVA]자바의 출력문(System.out.println), 스캐너 클래스(Scanner)서식 문자, 제어 문자
바켠주
2024. 3. 18. 00:36
728x90
자바에서 데이터를 화면에 출력하는 법!
System.out.println()
괄호 안의 내용을 출력하고 행을 바꿈(자동개행 o)
System.out.printf()
문자열을 서식 문자로 이용해 형식화 된 내용을 출력(자동개행 x)
System.out.print()
괄호 안의 내용 출력(자동개행 x)
System.out.printf에서 사용 가능한 서식 문자에 대해 알아보자!
%d : 정수 (10진수)
%o : 정수 (8진수)
%x : 정수 (16진수)
%f : 실수
%e : 지수 (e표기 기반)
%g : 출력 대상에 따라 %e 또는 %f 형태로 출력
%s : 문자열
%c : 문자
입력
System.out.printf("안녕하세요 저는 대학교 %d학년 입니다." 4);
실행 결과
"안녕하세요 저는 대학교 4학년 입니다."
제어 문자
\n : 줄바꿈
\t : 수평 탭
\' : 작은 따옴표 표시
\" : 큰 따옴표 표
Scanner 클래스
자바에서 사용자에게 입력을 받을 때 사용하는 클래스
형식)
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
- nextInt() : int형 입력 및 리턴
- next() : String형 입력 및 리턴(공백을 기준으로 단어 하나를 읽음)
- nextLine() :String형 입력 및 리턴 (개행을 기준으로 한 줄을 읽음)
예제를 풀면 이상한 오류가 난다.
문제) 자신의 나이, 이름 ,학교, 거주지를 입력 받아 출력하는 코드 작성
Scanner sc = new Scanner(System.in);
System.out.println("나이 >> ");
int age = sc.nextInt();
System.out.println("이름 >> ");
String name = sc.nextLine();
System.out.println("학교 >> ");
String sch = sc.nextLine();
System.out.println("거주지 >> ");
String addr = sc.nextLine();
System.out.printf("저의 나이는 %d살이고, 이름은 %s"
+ "학교는 %s, %s 에 살고 있습니다.",age,name,sch,addr);
이렇게 작성하면
이런 오류가 생긴다. 나이는 입력했지만 이름을 입력하기도 전에 학교명을 입력하게 되어버린다.
오류 원인)
nextInt()와 next()(nextLine()제외 모든 메서드)는 개행 문자(엔터, 스페이스)를 기준으로 입력을 받기 때문에 문자, 숫자만 가지고 나가고 버퍼에 개행문자는 남아있다. 하지만 nextLine()은 개행 문자까지 입력을 받는다.
그렇기 때문에 nextInt로 받은 나이를 입력한 후 남아있는 개행 문자(엔터)로 인해 이름 입력(nextLine())이 넘어가고 학교명을 바로 입력받는 것이다.
해결 방법)
사이에 nextLine()을 한 번 입력한다.
Scanner sc = new Scanner(System.in);
System.out.println("나이 >> ");
int age = sc.nextInt();
System.out.println("이름 >> ");
sc.nextLine();
String name = sc.nextLine();
System.out.println("학교 >> ");
String sch = sc.nextLine();
System.out.println("거주지 >> ");
String addr = sc.nextLine();
System.out.printf("저의 나이는 %d살이고, 이름은 %s"
+ "학교는 %s, %s 에 살고 있습니다.",age,name,sch,addr);
정상적으로 입력 받을 수 있다.