package com.whsxt.oneyear;
import java.util.Scanner;
/**
*
* @author admin
*万年历:
*从1900年1月1日正好是星期一, 假设输入的是:1901年3月,1901年3月1日前面
*有几个空格([1900, 1901)的总天数 + [1901年1月, 1901年3月)的总天数 + 1) % 7:
*实现步骤:
* 1)通过Scanner获取年(year)和月(month)
* 2)获取[1900, year)的总天数 + [year年1月, year年month月)的总天数
* 从而获取到year年month月的1号前面有几个空格
* 3)获取year年month月的总天数
* 4)实现year年month月的日历布局
*/
public class Calendar {
public static void main(String[] args) {
// 1)通过Scanner获取年(year)和月(month)
Scanner input = new Scanner(System.in);
System.out.println("请输入年份:");
int year = input.nextInt();
System.out.println("请输入月份:");
int month = input.nextInt();
// 保存润年还是平年的天数
int yearDays = 0;
// 判断年份合法性
if(year < 1900 )
{
System.out.println("年份太早了,暂时查不出来,程序员正在加班改bug中");
}
else {
// 年份合法,进入循环
for (int i = 1900; i < year; i++) {
// 判断闰年还是平年
if((i % 4 ==0 && i % 100 != 0) || i % 400 == 0)
{
// 是闰年
yearDays += 366;
}
else {
// 是平年
yearDays += 365;
}
}
// 获取year年1月到 year年month的总天数
// 用来接收总月数天数
// 2.2获取[year年1月, year年month月)的总天数
int monthDays = 0; // 用于保存月的总天数
for(int i = 1; i < month; i++) {
switch(i) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthDays += 31;
break;
case 4:
case 6:
case 9:
case 11:
monthDays += 30;
break;
case 2:
// 需要判断year年的2月是多少天。
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 闰年
monthDays += 29;
}
else { // 平年
monthDays += 28;
}
break;
default:
System.out.println("您输入的月份有误,请重新输入");
}
}
// 获取year年month月份总天数
int monthDay = 0; // 用于保存月的总天
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthDay = 31;
break;
case 4:
case 6:
case 9:
case 11:
monthDay = 30;
break;
case 2:
// 需要判断year年的2月是多少天。
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { // 闰年
monthDay = 29;
}
else { // 平年
monthDay = 28;
}
break;
default:
System.out.println("您输入的月份有误,请重新输入");
}
// 4.实现日历的布局
// 4.1获取总天数
int allDays = yearDays + monthDays;
// 4.2获取year年month的1号前面有多少个空格
int temp = (allDays + 1) % 7;
// 4.3输出星期几
System.out.println("星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日");
// 4.4先展示空格数
for(int i = 0; i < temp; i++) {
System.out.print("\t");
}
// 4.5后展示当前月的天数
for(int i = 1; i <= monthDay; i++) {
System.out.print(i + "\t");
// 当空格+i的个数为7de倍数时,执行换行操作
if((temp + i) % 7 == 0) {
System.out.println();
}
}
}
}
}
java_万年历 (纯循环,未加方法),易理解版
最新推荐文章于 2025-05-11 14:15:46 发布