需求说明:
随机输入日期计算星期几,打印任意一年的日历
已知,1900年1月1日是星期1,用户随机输入年月日,计算星期几
实现思路:
一、知道1900年1月1日为星期一,求输入的年份月份与1900年1月1日相隔的总天数。闰年366天,平年365天。
通过运算符实现闰年判断的条件:
(1)能被4整除且不能被100整除的年份
(2)能被400整除的年份
(3)两个条件只需要满足其中任意一个即可,故闰年判断的条件:
((i % 4 == 0)&&(i % 100 != 0))||(i % 400 == 0)
实现代码:
import java.util.Scanner;
public class Calendar {
public static void main(String[] args){
//第一步:接收用户输入的年份和月份
Scanner input=new Scanner(System.in);
System.out.println("请输入年份");
int year=input.nextInt();
System.out.println("请输入月份");
int month=input.nextInt();
int day=0;
//第二步:求输入的年份月份与1900年1月1日相隔的总天数
for (int i = 1900; i < year; i++) {
if ((i % 4 == 0 && i % 100 != 0)||(i % 400 == 0)) {
day+=366;
}else {
day+=365;
}
}
//求相隔月份的天数
for (int i = 1; i < month; i++) {
if (i==2) {
if ((year%4==0&&year%100!=0)||(year%400==0)) {
day+=29;
}else {
day+=28;
}
}else if (i==4||i==6||i==9||i==11) {
day+=30;
}else {
day+=31;
}
}
//第三步:计算上个月最后一天是星期几
int weeks=day%7;
int day2=0;
switch (month) {
case 2:
if (year%4==0&&year%100!=0||year%400==0) {
day2+=29;
}else {
day2+=28;
}
break;
case 4:
case 6:
case 9:
case 11:
day2=30;
default:
day2=31;
break;
}
//第四部:打印日历
System.out.println("一\t二\t三\t四\t五\t六\t日");
for (int i = 1; i <= weeks; i++) {
System.out.print(" \t");
}
for (int i = 1; i <= day2; i++) {
System.out.print(i+"\t");
if ((i+weeks)%7==0) {
System.out.println();
}
}
}
}