Java Output Formatting

2 분 소요

안녕하세요 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][3][4]지시자”
    출력 서식의 경우 지시자를 제외한 나머지는 생략이 가능하다.
    1. [1] 출력할 자리수의 정렬(양수는 오른쪽정렬, 음수(-)는 왼쪽정렬)
    2. [2] 전체 자리수가 지정된 경우 0의 표시(예 : %03인 경우 10을 입력했을때 010이 출력됨)
    3. [3] 출력할 전체 자리수 지정(예시 : 1000의 숫자라면 4입력)
    4. [4] 소수점 아래 자지루 지정( 예 : 3.4f )

지시자 종류

지시자 설명
%b boolean 형식으로 출력
%d 정수 형식으로 출력
%o 8진수 정수의 형식으로 출력
%x 또는 %X 16진수 정수의 형식으로 출력
%f 소수점 형식으로 출력
%c 문자형식으로 출력
%s 문자열 형식으로 출력
%n 줄바꿈 기능
%e 또는 %E 지수 표현식의 형식으로 출력

2. 문제풀이

  • 3개의 input이 있을때 실행값을 출력시켜라

Sample input

  1. java 100
  2. cpp 65
  3. python 50

Sample output

  1. java 100
  2. cpp 065
  3. 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()를 사용하여 각 조건을 만족시키기위해 사용한 코드입니다.

  1. 두개의 열을 만들기위에 처음 사용한 printf("%-15s", s1)에는 지시자 %n을 사용하지않아 다음 실행문이 줄바꿈 되지않음.
  2. 줄바꿈이 안되었기 때문에 뒤의 printf("%03d%n", x)가 2번째 열로 붙어 1번조건 완료
  3. 15개의 문자열과 왼쪽정렬을 만들기위해 지시자 ("%-15s", s1) 사용
  4. 3개의 숫자로 이루어지고 자릿수가 3개미만인경우 0을 출력하기위해 지시자 ("%03d%n", x)사용 (%n을 사용한것은 다음 출력문인 println의 실행문이 줄바꿈을 통해서 출력이 되야 하기때문에 사용)

처음 문제를 풀면서 printf에 지시자를 여러번 써도되는줄 알았지만 한번에 한개의 지시자만 사용해야됩니다. println의 경우 표현될 형식을 +를 사용하여 붙여 쓰지만 printf는 한번의 지시자만 사용해야 됩니다.
예시)

System.out.printf("%-15s",s1 + "%3d",x); //실패

예시처럼 출력하게 된다면 처음 “지시자”, s1은 출력되지만 뒤의 “지시자”는 실행이 안된채 코드대로 출력이 됩니다.
이점 기억하면서 다음문제 풀이때 포스팅을 이어가도록 하겠습니다.

댓글남기기