※ 사용자로부터 연, 월을 입력받아 달력을 그려주는(출력하는) 프로그램을 구현한다.
 단, 만년달력이 아니라 Calendar 클래스를 활용하여 작성할 수 있도록 한다.
 (API Document 적극 참조~!!!)

 실행 예)
 연도 입력 : 0
 연도 입력 : 2020
 월   입력 : -2
 월   입력 : 16
 월   입력 : 8

실행결과 예


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Calendar;

public class Test148
{
	public static void main(String[] args) throws IOException
	{
		//BufferedReader 클래스 기반 인스턴스 생성
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		// Calendar 클래스 기반 인스턴스 생성
		Calendar cal = Calendar.getInstance();

		// 주요 변수 선언
		int y,m;		//-- 년, 월
		int w;			//-- 요일
		int i;			//-- 루프, 변수

		do
		{
			System.out.print("연도 입력 : ");
			y = Integer.parseInt(br.readLine());
		}
		while (y<1);

		do
		{
			System.out.print("월    입력 : ");
			m = Integer.parseInt(br.readLine());
		}
		while (m < 1 || m > 12);
		
		// 사용자로부터 입력받은 연(y), 월(m)을 이용하여
		// 달력 객체의 날짜 세팅
		cal.set(y,m-1,1);
		//-- 월 구성 시 입력값(m)을 그대로 사용하는 것이 아니라
		//   입력값에서 1을 뺀 값으로 월을 설정해야 한다.
		
		// 세팅된 달력 객체로부터 요일 가져오기
        w = cal.get(Calendar.DAY_OF_WEEK);

		// 테스트(확인)
		//System.out.println(w);
		//--==>> 연도 입력 : 2020
		//       월   입력 : 8
		//        7 → 2020년 8월 기준 → 토요일 → 2020년 8월 1일 → 토요일
		
		// Calendar 클래스의 『getActualMaximum()』 메소드 check~!!!
		// 테스트(확인)
		System.out.println(cal.getActualMaximum(Calendar.DATE));
		//--==>> 31


		// 결과 출력 → 달력 그리기
		System.out.println();
		System.out.println("\t[ " + y + "년 " + m + "월 ]\n");
		System.out.println("  일  월  화  수  목  금  토");
		System.out.println("============================");

		// 공백 발생
		for (i = 1; i < w; i++)
		{
			System.out.print("    ");
		}

		// 테스트(확인)
		//System.out.printf("%4d",1);

		// Calendar 클래스의 『getActualMaximum()』 메소드 활용
		for (i=1; i <= cal.getActualMaximum(Calendar.DATE); i++)
		{
			System.out.printf("%4d",i);
			w++;		//-- 반복문을 수행하며 날짜가 증가할 때 마다
						//   요일도 함께 증가해 나갈 수 있도록 처리

			if (w%7==1) //-- 증가한 요일이 일요일이 될 때 마다... 개행 후 출력
				System.out.println();		//-- 개행
		}
		if(w%7!=1)
			System.out.println();			//-- 개행

		System.out.println("=============================");

	}
}

실행 결과

 

// 실행 결과
/*
연도 입력 : 2020
월    입력 : 2
29

        [ 2020년 2월 ]

  일  월  화  수  목  금  토
============================
                           1
   2   3   4   5   6   7   8
   9  10  11  12  13  14  15
  16  17  18  19  20  21  22
  23  24  25  26  27  28  29
=============================
계속하려면 아무 키나 누르십시오 . . .
*/

+ Recent posts