万年历(方法版)

需求

输入年和月,打印当月的日历

线索

1900年1月1日是星期一

分析
  1. 输入年和月

  2. 计算出1900年1月1日到输入年和月的第一天的总天数

    1. 计算1900年(包含)到输入年(排他)的总天数

    2. 计算1月到输入月(排他)的总天数

    3. 合并总天数

  3. 计算出当月的第一天是星期几

  4. 计算当月的天数

  5. 打印日历

import java.util.Scanner;

public class Test02 {
	
	public static void main(String[] args) {
		
		输入年和月
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入年:");
		int year = scan.nextInt();
		System.out.println("请输入月:");
		int month = scan.nextInt();
		
		//计算1900年1月1日到输入年输入月的第一天的总数
		int allDay = getAllDay(year,month);
		
		//计算星期几
		int week = getWeek(allDay);
		
		//计算当月的天数
		int day = getDay(year,month);
		
		//打印日历
		printCalender(year,month,day,week);
		
	}
	
	//判断是否是闰年的方法
	public static boolean isLeapYear(int year) {
		if(year%4==0&&year%100!=0||year%400==0) {
			return true;
		}
		return false;
	}
	
	//获取当月天数
	public static int getDay(int year,int month) {
			int day = 0;
			switch(month) {
			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(isLeapYear(year)) {
					day = 29;
				}else {
					day = 28;
				}
			break;
			}
			return day;
		}
		
		//计算1900年(包含)到输入年(排他)的总天数
	public static int getAllDayOfYear(int year) {
			int allDayOfYear = 0;
			for(int i=1900;i<year;i++) {
				if(isLeapYear(i)) {
					allDayOfYear += 366;
				}else {
					allDayOfYear += 365;
				}
			}
			return allDayOfYear;
		}
		
		//计算1月到输入月的
	public static int getAllDayOfMonth(int year,int month) {
			int allDayOfMonth = 0;
			for(int i=1;i<month;i++) {
				allDayOfMonth += getDay(year,i);
			}
			return allDayOfMonth;
		}
		
		//合并总天数
	public static int getAllDay(int year,int month) {
			int allDay = getAllDayOfYear(year)+getAllDayOfMonth(year,month)+1;
			return allDay;
		}
		
		//计算星期
	public static int getWeek(int allDay) {
			int week = allDay%7;
			if(week==0) {
				week = 7;
			}
			return week;
		}
		
		//打印日历
	public static void printCalender(int year,int month,int day,int week) {
			System.out.println(year+"年"+month+"月");
			System.out.println("一\t二\t三\t四\t五\t六\t日");
			
			int count = 0;//换行的计算器(逢7换行)
			
			//打印空格
			for(int i=1;i<week;i++) {
				System.out.print("\t");
				count++;
				
			}
			
			//打印日期
			for(int i=1;i<=day;i++) {
				System.out.print(i+"\t");
				count++;
				if(count%7==0) {
					System.out.println();//换行
				}
			}
		}

}

使用方法将代码分成几个模块,以此来减少代码冗余

相关推荐

  1. 万年历方法

    2024-01-27 15:42:02       40 阅读
  2. 基于51单片机的万年历系统设计

    2024-01-27 15:42:02       32 阅读
  3. 基于单片机的电子万年历设计

    2024-01-27 15:42:02       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 15:42:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 15:42:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 15:42:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 15:42:02       20 阅读

热门阅读

  1. 速盾:服务器接入CDN后上传图片失败的解决方案

    2024-01-27 15:42:02       24 阅读
  2. Git推送大量内容导致http 413错误

    2024-01-27 15:42:02       40 阅读
  3. 方法的重载

    2024-01-27 15:42:02       29 阅读
  4. git从clone到pr的全流程

    2024-01-27 15:42:02       36 阅读
  5. css怎么去除a标签的下划线?

    2024-01-27 15:42:02       36 阅读