1900년 1월 1일은 월요일이라는 점을 이용하여 요일 을 계산하는 프로그램이다.
아래 소스코드를 보면
1) 연/월/일을 입력 받는 main()
2) 구한 요일을 출력하는 PrintDay()
3) 그 달은 총 몇일인지 계산하여 리턴하는 MonthDays()
4) 그 날이 어떤 요일인지 계산하여 'X'요일을 리턴하는 DayofDate() 로 이루어져있다는 것을 알 수 있다.
계산 방법은 기준일자인 1900년 1월 1일로 부터 입력 받은 날짜까지 총 몇일 지났는지 알아낸다음,
그 날짜를 7로 나눈 나머지에 따라 일/월/화/수/목/금/토 요일을 계산하는 것이다.
일자 계산에는 1/3/5/7/8/10/12 월이라면 31일, 아니라면 30일, 평년 2월달이라면 28일, 윤년 2월달이라면 29일로 조건에 따라 날짜가 들어가도록 했다.
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import java.util.Scanner; public class DayCalc { public static void main(String[] args) { int year, day, month; Scanner scanner = new Scanner(System.in); //연,월,일을 입력받음 do { System.out.println("연도를 입력하세요 : "); year = scanner.nextInt(); } while (year < 1900); do { System.out.println("월을 입력하세요 : "); month = scanner.nextInt(); } while (month < 1 || month > 12); do { System.out.println("일을 입력하세요 : "); day = scanner.nextInt(); } while (day < 1 || day > 31); PrintDay(year, month, day); } public static void PrintDay(int year, int month, int day) { char dayOfWeek = DayofDate(year, month, day); System.out.println(year + "년 " + month + "월 " + day + "일은 " + dayOfWeek + "요일입니다." ); } public static int MonthDays(int year, int month) { int dayOfMonth = 0; //윤년일 조건 Boolean isLeapYear = ((year % 4 == 0) && (year % 100 !=0)) || year % 400 == 0; //31일 일 조건 Boolean is31 = (month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12); if (isLeapYear && month == 2) { dayOfMonth = 29; } else if (!isLeapYear && month == 2) { dayOfMonth = 28; } else if (is31) { dayOfMonth = 31; } else { dayOfMonth = 30; } return dayOfMonth; } public static char DayofDate(int year, int month, int day) { char dayOfWeek = 0; int totalDay = 0; for(int i = 1900; i <= year; i++) { //입력 년도 이전 까지는 12월 까지 다 더함 if (i < year) { for(int j = 1; j <= 12; j++) { totalDay += MonthDays(i, j); } //입력 년도는 입력 월 이전까지 더함 } else { for(int j = 1; j < month; j++) { totalDay += MonthDays(i, j); } } } //나머지 일 수를 구해진 전체 일수에 더함 totalDay += day; //기준일인 1900년 1월 1일이 월요일이므로 switch (totalDay % 7) { case 0: dayOfWeek = '일'; break; case 1: dayOfWeek = '월'; break; case 2: dayOfWeek = '화'; break; case 3: dayOfWeek = '수'; break; case 4: dayOfWeek = '목'; break; case 5: dayOfWeek = '금'; break; case 6: dayOfWeek = '토'; break; } return dayOfWeek; } } | cs |
'프로그래밍 > Java' 카테고리의 다른 글
Stream의 개념을 설명할 수 있나요? (의역) (0) | 2023.07.30 |
---|---|
[Java] 문자열에서 URL만 추출하기 (0) | 2021.01.08 |
[Java] URL인지 체크하기, URL 정규식 (0) | 2021.01.08 |
Java 사다리 게임 소스 (0) | 2017.12.01 |
객체 지향 프로그래밍, 자바 (0) | 2016.06.17 |