HOMEWORK

DAY 10 - HOMEWORK - 달력 (2024.07.16)

summ.n 2024. 8. 12. 19:06

 

 

 

[문제] 만년달력

 

[클래스]

CalendarEx

 

[필드]

필드는 원하는 것으로 직접 잡기

 

[메소드]

생성자 : 년도, 월을 입력

- 기본생성자 : 입력

- 메소드 : calc() -> 매달 1일의 요일이 무엇인지?

(Calendar에 메소드를 찾아서 수행)

-> 매달 마지막이 28, 29, 30, 31 무엇인지? (Calendar에 메소드를 찾아서 수행)

display() -> 출력

 

[클래스]

CalendarMain

package abstract_;

import java.util.Scanner;
import java.util.Calendar;

class CalendarEx{
	private int year, month, week, lastDay;

	public CalendarEx(){	
		Scanner scan = new Scanner(System.in);
		
		System.out.print("년도 입력 : ");
		year = scan.nextInt();
		System.out.print("월 입력 : ");
		month = scan.nextInt();
	}

	public void calc(){	
		//시스템 날짜를 기준으로 생성 
		//=> 오늘 날짜 2024.07.18이 기준 ★★★★★ -> 바꿔줘야함.
		Calendar cal = Calendar.getInstance(); //메소드 이용
		
		//cal.set(Calendar.YEAR, year);
		//cal.set(Calendar.MONTH, month-1); //1월-0/2월-1
		//cal.set(Calendar.DAY_OF_MONTH, 1);
		
		cal.set(year, month-1, 1); //오버로드 된거
		
		week = cal.get(Calendar.DAY_OF_WEEK); //1일의 요일 구하기 week가 7의배수
		//System.out.println(week); -> 탭 개수 확인
		lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH); //월의 마지막 일 구하기
	}
	
 

public void calc(){

cal.set(year,month-1,1);

}

  • cal 객체의 날짜를 사용자가 입력한 연도와 월의 첫째 날로 설정한다.
  • month - 1을 사용하는 이유는 Calendar 클래스에서 월이 0부터 시작하기 때문이다. 예를 들어, 1월은 0, 2월은 1로 표현된다.

public void display() {
		System.out.println("일\t월\t화\t수\t목\t금\t토");
		
		for(int i=1; i<week; i++) {
			System.out.print("\t");
		}		
		for(int i=1; i<=lastDay; i++) {
			System.out.print(i + "\t");
			if((week) % 7 ==0)
				System.out.println();
			week++;
		}
	}
}
 
  • 첫 번째 for 루프는 1일이 시작하는 요일까지 빈 공간을 출력한다.
  • 두 번째 for 루프는 날짜를 출력하며, 일주일이 끝날 때마다 줄바꿈을 한다.

public class CalendarMain {
	public static void main(String[] args) {
		CalendarEx c = new CalendarEx();
		c.calc();
		c.display();
	}
}
 
년도 입력 : 2024
월 입력 : 7
일	월	화	수	목	금	토
	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	30	31	
 

이 코드는 꽤나 머리를 굴려야되는 문제인데 어려워서 강사님 설명을 들어봐야 될 것 같다,,,