经典的万年历(Java)~
### 经典的万年历实现(Java) #### 概述 本文将详细介绍一个使用Java编写的经典万年历程序。该程序通过简洁高效的代码实现了万年历功能,能够准确计算出任意年份、月份的具体日期,并显示为日历格式。程序的核心在于巧妙地利用了循环结构以及条件判断,来处理不同年份的天数变化,特别是闰年的特殊处理。 #### 关键技术点 1. **用户输入与验证** - 程序首先提示用户输入年份和月份。 - 对用户的输入进行有效性验证,确保输入的年份大于等于1900,月份在1至12之间。 2. **闰年判断** - 通过简单的数学逻辑判断输入的年份是否为闰年。 - 闰年的定义:如果年份能被4整除但不能被100整除,或者能被400整除,则为闰年。 3. **每月天数计算** - 根据不同的月份计算当月的天数。 - 需要考虑普通月份和二月的特殊情况,尤其是闰年时二月的天数。 4. **累计天数计算** - 计算输入月份之前的所有月份的总天数(sumMonthDay)。 - 计算输入年份之前的所有年份的总天数(sumYearDay),包括对闰年的处理。 5. **星期计算** - 根据累计天数计算输入日期是星期几(week)。 - 星期计算采用模运算,根据公历规定,公元1900年1月1日为星期一。 6. **日历输出** - 将计算出的日历以表格形式输出,包括正确的星期定位和日期排列。 #### 代码解析 1. **初始化变量** ```java int year = 0; int month = 0; int day = 0; int sumMonthDay = 0; int sumYearDay = 0; int sumDay = 0; int week = 0; int count = 0; boolean flag = false; ``` - 这里定义了多个整型变量用于存储年、月、日等信息,以及布尔型变量`flag`用于标记是否为闰年。 2. **用户输入及验证** ```java do { if (flag) { System.out.print("输入错误,请重新输入年份:"); } System.out.print("请输入年份:"); year = in.nextInt(); System.out.print("请输入月份:"); month = in.nextInt(); if (year < 1900 || month < 1 || month > 12) { flag = true; } else { flag = false; } } while (flag); ``` - 使用`do-while`循环不断提示用户输入,直到输入合法为止。 3. **闰年判断与每月天数计算** ```java for (int i = 1900; i <= year; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { flag = true; } else { flag = false; } // 仅当 i 等于输入的年份时,计算每个月的天数 if (i == year) { for (int j = 1; j <= month; j++) { switch (j) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: day = 31; break; case 4: case 6: case 9: case 11: day = 30; break; case 2: if (flag) { day = 29; } else { day = 28; } break; } if (j < month) { sumMonthDay += day; } } } // 当 i 小于输入的年份时,累加每年的天数 if (i < year) { if (flag) { sumYearDay += 366; } else { sumYearDay += 365; } } } ``` - 通过循环遍历从1900年到输入年份之间的所有年份,计算每月天数,并累加得到sumMonthDay和sumYearDay。 4. **星期计算** ```java sumDay = sumMonthDay + sumYearDay; week = (sumDay + 1) % 7; ``` - 根据累计天数计算输入日期是星期几。 5. **日历输出** ```java System.out.print("\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t星期日\n"); for (int i = 0; i < week; i++) { System.out.print("\t"); count++; } for (int i = 1; i <= day; i++) { count++; System.out.print(i + "\t"); if (count % 7 == 0) { System.out.print("\n"); } } ``` - 输出完整的日历表格,包括正确的星期定位和日期排列。 #### 总结 本程序通过简洁高效的代码实现了万年历功能,能够准确计算并输出任意年份、月份的日历。程序的关键在于对用户输入的有效性验证、闰年的正确判断、每月天数的精确计算以及日历的美观输出等方面。通过对这些技术细节的深入理解和应用,可以进一步提高程序的健壮性和用户体验。
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int year=0;
int month=0;
int day=0;
int sumMonthDay=0;
int sumYearDay=0;
int sumDay=0;
int week=0;
int count=0;
boolean flag=false;
do{
if(flag){
System.out.print("你傻呀!");
}
System.out.print("请输入年份:");
year=in.nextInt();
System.out.print("请输入月份:");
month=in.nextInt();
if(year<1900||month<1||month>12){
- 粉丝: 8
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助