Java Output Formatting
안녕하세요 Legas 입니다. :)
이번 문제풀이와 문제를 풀면서 배운것을 포스팅하겠습니다.
코딩에는 명령문을 실행하지않으면 눈으로 직접 볼 수 없습니다.
결과를 봐야지만 내가 만든 코드들이 제대로 잘 돌아가는지 알 수 있습니다.
System.out.println()
은 자바에서 기본 출력문으로 가장 많이 사용되며 출력하고 싶은 내용 그대로를 입력하여 출력합니다.
이전 포스팅에서 메인메소드를 println()
명령문으로 실행한것을 계속 했었습니다.
이번 문제를 풀면서 println()
와 비슷한 명령문인 printf()
라는 명령문을 공부하게 되었습니다.
1. printf() - 형식화된 출력
기본 출력문인 println()
은 변수의 값을 그대로 출력하고, 값을 변환하지 않고는 다른형식으로 출력할 수 없습니다.
반면에 printf()
는 지시자의 명령어를 통해 변수의 값을 여러가지 형식으로 변환하여 출력 할 수 있습니다.
1-1 printf() 사용법
printf()
의 사용 정의는 아래와 같습니다.
System.out.printf("출력서식", 출력할 내용);
println()
는 한출에 한 명령어만 출력하도록 되어있지만 printf()
는 기본 명령어와 다릅니다.
- 출력 후 줄바꿈을 하지 않는다.(줄바꿈을 하려면 출력서식에 지시자를 입력해야함)
- 출력하려는 값의 수만큼 지시자도 사용해야 한다.
- 출력될 값과 지시자의 순서는 일치해야 한다.
- 지시자를 제외한 문자는 입력한 그대로 출력된다.
- 출력서식
“%[1][2][3][4]지시자”
출력 서식의 경우 지시자를 제외한 나머지는 생략이 가능하다.- [1] 출력할 자리수의 정렬(양수는 오른쪽정렬, 음수(-)는 왼쪽정렬)
- [2] 전체 자리수가 지정된 경우 0의 표시(예 : %03인 경우 10을 입력했을때 010이 출력됨)
- [3] 출력할 전체 자리수 지정(예시 : 1000의 숫자라면 4입력)
- [4] 소수점 아래 자지루 지정( 예 : 3.4f )
지시자 종류
지시자 | 설명 |
---|---|
%b | boolean 형식으로 출력 |
%d | 정수 형식으로 출력 |
%o | 8진수 정수의 형식으로 출력 |
%x 또는 %X | 16진수 정수의 형식으로 출력 |
%f | 소수점 형식으로 출력 |
%c | 문자형식으로 출력 |
%s | 문자열 형식으로 출력 |
%n | 줄바꿈 기능 |
%e 또는 %E | 지수 표현식의 형식으로 출력 |
2. 문제풀이
- 3개의 input이 있을때 실행값을 출력시켜라
Sample input
- java 100
- cpp 65
- python 50
Sample output
- java 100
- cpp 065
- python 050
- 각 행에는 두개의 열이 있어야 합니다.
- 첫번째 열은 15개의 문자열로 이루어져있으며 왼쪽으로 정렬되야 합니다.
- 두번째 열에는 3개의 숫자로 이루어져야하고 자릿수가 3개 미만이면 0을 포함하여 출력해야 합니다.
아래 문제를 풀었던 코드
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("================================");
for(int i=0;i<3;i++)
{
String s1=sc.next();
int x=sc.nextInt();
//System.out.println(s1+x);
System.out.printf("%-15s", s1);
System.out.printf("%03d%n", x);
}
System.out.println("================================");
}
}
위의 문제 풀이처럼 println()
을 주석처리하여 사용하지 않았습니다.
ptintf()
를 사용하여 각 조건을 만족시키기위해 사용한 코드입니다.
- 두개의 열을 만들기위에 처음 사용한
printf("%-15s", s1)
에는 지시자 %n을 사용하지않아 다음 실행문이 줄바꿈 되지않음. - 줄바꿈이 안되었기 때문에 뒤의
printf("%03d%n", x)
가 2번째 열로 붙어 1번조건 완료 - 15개의 문자열과 왼쪽정렬을 만들기위해 지시자
("%-15s", s1)
사용 - 3개의 숫자로 이루어지고 자릿수가 3개미만인경우 0을 출력하기위해 지시자
("%03d%n", x)
사용 (%n을 사용한것은 다음 출력문인 println의 실행문이 줄바꿈을 통해서 출력이 되야 하기때문에 사용)
처음 문제를 풀면서 printf
에 지시자를 여러번 써도되는줄 알았지만 한번에 한개의 지시자만 사용해야됩니다.
println
의 경우 표현될 형식을 +를 사용하여 붙여 쓰지만 printf
는 한번의 지시자만 사용해야 됩니다.
예시)
System.out.printf("%-15s",s1 + "%3d",x); //실패
예시처럼 출력하게 된다면 처음 “지시자”, s1은 출력되지만 뒤의 “지시자”는 실행이 안된채 코드대로 출력이 됩니다.
이점 기억하면서 다음문제 풀이때 포스팅을 이어가도록 하겠습니다.
댓글남기기