20/10/23

아라·2020년 10월 23일
0

국비교육

목록 보기
10/30

메서드 접두어

setXXX() : 값 대입(쓰기)
getXXX() : 값 반환(읽기)
isXXX() : 확인. true/false 반환

1년치 달력만들기(ver.No Calendar)

package com.test.java;

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

public class Calendar {

	   public static void main(String[] args) throws NumberFormatException, IOException {
		      
		      //달력 만들기
		      //1. 년, 월
		      //2. 해당월의 마지막 일?
		      // - 윤년 계산
		      //3. 해당월의 1일의 요일?
		      // - 윤년 계산
		      // - 누적일 계산
		      
//		      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		      
//		      System.out.println("달력 만들기");
//		      
//		      System.out.print("년: ");
//		      int year = Integer.parseInt(reader.readLine());
//		      
//		      System.out.print("월: ");
//		      int month = Integer.parseInt(reader.readLine());
//		      
//		      createCalendar(year, month);
		   
		   	  // 2020년 달력
		      for (int i=1; i<=12;i++) {
		    	  createCalendar(2020, i);
		    	  System.out.println();
		    	  System.out.println();
		      }
		      
		   }

		   private static void createCalendar(int year, int month) {
		      
		      int lastDay = 0; //마지막일
		      int day_of_week = 0; //요일
		      
		      //메서드 접두어
		      // - setXXX() : 값 대입(쓰기)
		      // - getXXX() : 값 반환(읽기)
		      // - isXXX() : 확인. true/false 반환
		      
		      lastDay = getLastDay(year, month);
		      day_of_week = getDayOfWeek(year, month);
		      
		      //System.out.println(lastDay);
		      //System.out.println(day_of_week);
		      
		      //출력하기
		      System.out.println();
		      System.out.println("====================================================");
		      System.out.printf("                    %d년 %02d월\n", year, month);
		      System.out.println("====================================================");
		      System.out.println("[일]\t[월]\t[화]\t[수]\t[목]\t[금]\t[토]");
		      
		      // 1일을 요일 위치에 맞추기 위해 탭 추가
		      for (int i=0;i<day_of_week;i++) {
		    	  System.out.print("\t");
		      }
		      //날짜 출력
		      for (int i=1;i<=lastDay;i++) {
		    	  System.out.printf("%3d\t", i);
		    	  //현재 출력하는 날짜(i)가 토요일인지?
		    	  if ((i+day_of_week)%7==0) {
		    		  System.out.println();
		    	  }
		      }
		      
		      
		      
		      
		   }

		   private static int getDayOfWeek(int year, int month) {
		      
		      //누적 변수
		      int totalDays = 0;
		      
		      //1.1.1 ~ 2019.12.31
		      for (int i=1; i<year; i++) {
		         
		         if (isLeafYear(i)) {
		            totalDays += 366;
		         } else {
		            totalDays += 365;
		         }
		      }
		      
		      //2020.1.1 ~ 2020.9.30
		      for (int i=1; i<month; i++) {
		         totalDays += getLastDay(year, i);
		      }
		      
		      //2020.10.1      
		      totalDays++;
		      
		      return totalDays % 7; //요일 반환
		   }

		   private static int getLastDay(int year, int month) {
		      
		      switch (month) {
		         case 1:
		         case 3:
		         case 5:
		         case 7:
		         case 8:
		         case 10:
		         case 12:
		            return 31; //+break
		         case 4:
		         case 6:
		         case 9:
		         case 11:
		            return 30;
		         case 2:
		            return isLeafYear(year) ? 29 : 28;
		      }
		      
		      return 0;
		   }

		   private static boolean isLeafYear(int year) {
		      
		      if (year % 4 == 0) {
		         if (year % 100 != 0) {
		            return true;
		         } else {
		            if (year % 400 == 0) {
		               return true;
		            } else {
		               return false;
		            }
		         }
		      } else {
		         return false;
		      }
		      
		      
		   }

		}

1년치 달력만들기(ver.Calendar)

package com.test.java;

import java.util.Calendar;

public class CalendarByCalendar {

	   public static void main(String[] args) {
		      
		 // 2020년 달력
		      for (int i=1; i<=12;i++) {
		    	  createCalendar(2020, i);
		    	  System.out.println();
		    	  System.out.println();
		      }
		      
		   } //main

		   private static void createCalendar(int year, int month) {
		      
		      int lastDay = 0; //마지막일
		      int day_of_week = 0; //요일
		      
//		      lastDay = getLastDay(year, month);
//		      day_of_week = getDayOfWeek(year, month);
		      
		      Calendar c1=Calendar.getInstance();
		      c1.set(year, month-1, 1); // 2020-10-01
		      lastDay=c1.getActualMaximum(Calendar.DATE);
		      day_of_week=c1.get(Calendar.DAY_OF_WEEK)-1;
		      
		      //출력하기
		      System.out.println();
		      System.out.println("====================================================");
		      System.out.printf("                    %d년 %02d월\n", year, month);
		      System.out.println("====================================================");
		      System.out.println("[일]\t[월]\t[화]\t[수]\t[목]\t[금]\t[토]");
		      
		      // 1일을 요일 위치에 맞추기 위해 탭 추가
		      for (int i=0;i<day_of_week;i++) {
		    	  System.out.print("\t");
		      }
		      //날짜 출력
		      for (int i=1;i<=lastDay;i++) {
		    	  System.out.printf("%3d\t", i);
		    	  //현재 출력하는 날짜(i)가 토요일인지?
		    	  if ((i+day_of_week)%7==0) {
		    		  System.out.println();
		    	  }
		      }
		      
		      
		      
		      
		   }
}

0개의 댓글