우당탕탕 개발일지

10일차_과제 본문

비트캠프/과제

10일차_과제

ujin302 2024. 7. 16. 18:10
반응형

1. 만년달력

[클래스] CalendarEx

[필드] 필드는 원하는 것으로 직접 잡기 
[메소드]
생성자 : 년도, 월을 입력
- 기본생성자 : 입력
- 메소드 : calc() -> 매달 1일의 요일이 무엇인지? (Calendar에 메소드를 찾아서 수행)
                -> 매달 마지막이 28, 29, 30, 31 무엇인지? (Calendar에 메소드를 찾아서 수행)
         display() -> 출력


[클래스] CalendarMain         

[실행결과]
년도 입력 : 2024                 년도 입력 : 2000
월 입력 : 1                     월 입력 : 2

일   월   화   수   목   금   토          일   월   화   수   목   금   토
   1  2  3  4  5  6           1  2  3  4  5
7  8  9  10 11 12 13    6  7  8  9  10 11 12
14 15 16 17 18 19 20    13 14 15 16 17 18 19
21 22 23 24 25 26 27    20 21 22 23 24 25 26
28 29 30 31             27 28 29
 */

 

코드

CalendarMain.java

package homework;

public class CalendarMain {

	public static void main(String[] args) {
		CalendarEx c = new CalendarEx();
		
		c.calc();
		c.display();
		
	}

}

 

CalendarEx.java

package homework;

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

public class CalendarEx {
	private Calendar[] cal = new Calendar[2];
	private int[] year = new int[cal.length];
	private int[] month = new int[cal.length];
	private int[] dayOfWeek = new int[cal.length];
	private int[] lastDay = new int[cal.length];
	
	public CalendarEx() {
		Scanner sc = new Scanner(System.in);
		
		// 입력
		for(int i=0; i<cal.length; i++) {
			System.out.print("년도 입력 : ");
			this.year[i] = sc.nextInt();
			
			System.out.print("월 입력 : ");
			this.month[i] = sc.nextInt();
		}
	}
	
	public void calc() {
		// 날짜 설정 
		for(int i=0; i<cal.length; i++) {
			cal[i] = Calendar.getInstance();
			cal[i].set(Calendar.YEAR, this.year[i]); // 년도 설정
			cal[i].set(Calendar.MONTH, this.month[i]-1); // 월 설정 
			cal[i].set(Calendar.DATE, 1); // 1일 설정 
			dayOfWeek[i] = cal[i].get(Calendar.DAY_OF_WEEK); // 요일 구하기 
			lastDay[i] = cal[i].getActualMaximum(Calendar.DAY_OF_MONTH); // 해당 달의 마지막 날
		}
	}
	
	public void display() {
		int j=0;
		System.out.println("\n일   월   화   수   목   금   토\t일   월   화   수   목   금   토");
		
		// cal[0] : 1일까지 띄어쓰기 
		for(int c=1; c<this.dayOfWeek[0]; c++) {
			System.out.print("   ");
		}
		
		// cal[0] : 일짜 출력 
		for(int i=1; i<this.lastDay[0]+1; i++) {
			cal[0].set(Calendar.DAY_OF_MONTH, i); 
			System.out.print(i);
			
			if(i < 10) System.out.print("  ");
			else System.out.print(" ");
			
			// cal[0] : 줄 바꿈
			if(cal[0].get(Calendar.DAY_OF_WEEK) % 7 == 0 || i == this.lastDay[0] ) {
				
				if(i == this.lastDay[0]) {
					for(int c = cal[0].get(Calendar.DAY_OF_WEEK); c<7; c++) {
						System.out.print("   ");
					}
				}
				
				// cal[1] : 출력 
				System.out.print("\t");
				for(j=j+1; j<this.lastDay[1]+1; j++) {
					if(j==1) {
						// cal[1] : 1일까지 띄어쓰기 
						for(int c=1; c<this.dayOfWeek[1]; c++) {
							System.out.print("   ");
						}
					}
					
					// cal[1] : 일짜 출력
					cal[1].set(Calendar.DAY_OF_MONTH, j); 
					System.out.print(j);
					
					if(j < 10) System.out.print("  ");
					else System.out.print(" ");
					
					if(cal[1].get(Calendar.DAY_OF_WEEK) % 7 == 0) {
						System.out.println();
						if(i != this.lastDay[0])break;
						else System.out.print("\t\t\t");
					}
				}
			}
		}
	}
	
}

 

출력화면

 
반응형

'비트캠프 > 과제' 카테고리의 다른 글

15일차_과제  (0) 2024.07.23
11일차_과제  (0) 2024.07.18
9일차_과제  (0) 2024.07.16
7일차_과제  (0) 2024.07.12
6일차_과제  (0) 2024.07.10