seong
17 연,월,일 을 받아서 무슨 요일인지 출력하는 프로그램 본문
풀이
- 윤년을 조건식으로 넣어준다.
- 1900년 1월 1일 이후의 요일을 구하는 방법은 입력받은 날짜 까지의 총 날짜 수 % 7의 값으로 구할 수 있다.
- 해당 달의 날짜는 만약 2월 10일이라면 -> 31일 + 10일 + 총 날짜에 더해준다
윤년이란?
- 4년마다 2월이 29일 까지인 해가 있다 이런 것을 윤년 이라고 한다.
- 하지만, 100의 배수의 해는 윤년이 아니다.
- 윤년이되면 날짜가 +1이 된다.
package ex06;
import java.util.Scanner;
public class yearEx {
public static void main(String[] args) {
// ctrl + shift + f 자동 정렬
/*
* year에서 1900을 빼고 365를 곱한다. : today += (year-1900) * 365
* (year - 1900)/4 가 윤년의 횟수이므로 이 값을 더한다 : today += (year - 1900) /4;
* 주어진 연도가 윤년이고 주어진 월이 2월이나 1월이면 위의 결과에서 1을 뺀다
* 위의 결과에 주어진 월과 일까지의 날수를 더한다.
* 요일을 구하기 위해선 구하고자하는 년월일까지의 모든 날짜수를 더한 후 7을 나누면된다.
*/
Scanner sc = new Scanner(System.in);
System.out.print("연도를 입력하시오: ");
int year = sc.nextInt();// 연도
System.out.print("월을 입력하시오: ");
int month = sc.nextInt(); // 월
System.out.print("일을 입력하시오: ");
int day = sc.nextInt(); // 일
sc.close();
int week; // 0~9 요일을 저장할 공간
int total_days = 0;
total_days += (year - 1900) * 365; // 입력한 날짜 까지의 총 일수(윤달 미 포함)
total_days += (year - 1900) / 4; // 윤년으로 인해 추가되는 날짜의 수
// 윤년 구하는 방법 -> 4로 나누어떨어지는 년도. ->
//4로 나누었지만 100으로 나누어 떨어지면 평년(윤년x)AND 400으로 나누어 떨어지면 윤년
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)){
if((month == 2 || month == 1)) {
total_days -=1;
}
}
//각 달마다 날짜 계산
if(month == 1) {
total_days += day;
}
else if(month == 2) {
total_days += day + 31;
}
else if(month == 3) {
total_days += day + 31 + 28;
}
else if(month == 4) {
total_days += day + 31 + 28 + 31;
}
else if(month == 5) {
total_days += day + 31 + 28 + 31 + 30;
}
else if(month == 6) {
total_days += day + 31 + 28 + 31 + 30 + 31;
}
else if(month == 7) {
total_days += day + 31 + 28 + 31 + 30 + 31 + 30;
}
else if(month == 8) {
total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31;
}
else if(month == 9) {
total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
}
else if(month == 10) {
total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
}
else if(month == 11) {
total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
}
else if(month == 12) {
total_days += day + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
}
week = total_days % 7;
// 배열로 선언
String arry[] = new String[] {"일","월","화","수","목","금","토"};
for(int i = 0; i < arry.length;i++) {
if(week == i) {
System.out.println(year + "년 " + month + "월 " + day + "일은 " + arry[i]+"요일입니다.");
break;
}
}
// if (week == 0) {
// System.out.println(year + "년 " + month + "월 " + day + "일은 " + "일요일입니다.");
// } else if (week == 1) {
// System.out.println(year + "년 " + month + "월 " + day + "일은 " + "월요일입니다.");
// } else if (week == 2) {
// System.out.println(year + "년 " + month + "월 " + day + "일은 " + "화요일입니다.");
// } else if (week == 3) {
// System.out.println(year + "년 " + month + "월 " + day + "일은 " + "수요일입니다.");
// } else if (week == 4) {
// System.out.println(year + "년 " + month + "월 " + day + "일은 " + "목요일입니다.");
// } else if (week == 5) {
// System.out.println(year + "년 " + month + "월 " + day + "일은 " + "금요일입니다.");
// } else if (week == 6) {
// System.out.println(year + "년 " + month + "월 " + day + "일은 " + "토요일입니다.");
// }
}
}
결과
'자바 > 자바 실습' 카테고리의 다른 글
19 객체 지향,절차지향 (0) | 2022.08.01 |
---|---|
18 숫자 야구 (0) | 2022.07.29 |
16 while문 + if문 (break, continue) (0) | 2022.07.28 |
15 if,else, else if문 (0) | 2022.07.28 |
14 While 반복문 (0) | 2022.07.28 |