使用JAVA完成万年历

package cfy.Demos;

import java.util.Scanner;

//万年历
public class Demo1 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		System.out.println("请输入年:");
		Scanner input = new Scanner(System.in);
		int year = input.nextInt();
		System.out.println("请输入月:");
		int month = input.nextInt();
		//6
		int totalYear = getFormYearTo1900TotalDays(year);
		int totalMonth = getNowYearToDays(year,month);
		//7 求星期 公式是 %7  --> 0~6之间的数字
		//0代表是星期日 以此类推
		int week = (totalMonth+totalYear+1)%7;
		//封装一个方法 这个方法进行格式输出
		FormatCalender(year,month,week);
	}
	
	/**
	 * 格式化日历
	 * @param year 输入的年份
	 * @param month 输入的月份
	 * @param week 输入的星期
	 */
	public static void FormatCalender(int year,int month,int week)
	{
		//发现打印规律是逢7换行
		int cut = 0; //统计计数
		System.out.println("星期日\t\t星期一\t\t星期二\t\t星期三\t\t星期四\t\t星期五\t\t星期六");
		//0-6之间//打印星期
		for (int i = 1;i <= 6;i++)
		{
			System.out.print("\t\t");  //此处别用println,不然换行
			
			//统计计数
			cut++;
		}
		//打印日历天数
		for (int i = 1;i <=getNowMonthDays(year,month);i++)
		{
			//打印值
			System.out.print(i+"\t\t");
			cut ++;
			if(cut%7==0)
			{
				System.out.println();
			}
		}
		
	}
	
	//静态方法
	/**
	 * 判断闰年
	 * @param year 年份
	 * @return true 是闰年  false 不是闰年
	 */
	public static boolean isLeapYear(int year) {
		if ((year%4==0 && year%100!=0) || (year%400==0))
		{
			return true;
		}else
		{
			return false;
		}
	}
	
	/**
	 * 通过月份获取对应的天数
	 * @param year 对应的年份
	 * @param month 对应的月份
	 * @return 月份对应的天数
	 */
	public static int getNowMonthDays(int year,int month)
	{
		switch(month)
		{
		case 2:
			return isLeapYear(year) ? 29 : 28;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
			default:
				return 31;
		}
	}
	
	/**
	 * 
	 * @param year
	 * @return
	 */
	public static int getFormYearTo1900TotalDays(int year)
	{
		//定义一个变量用来计算总天数
		int sum = 0;
		for (int i= 1900;i<year;i++)
		{
			//isLeapYear(year); //计算的始终是同一个年份//因为和当前这个函数的参数同名了
			sum += isLeapYear(i) ? 366 : 365;
		}
		return sum;
	}
	
	/**
	 * 当前月份距离1月1日的总天数
	 * @param year 当前年份
	 * @param month 当前月份
	 * @return
	 */
	public static int getNowYearToDays(int year,int month)
	{
		//定义一个变量用来计算总天数
		int sum = 0;
		for (int i = 1;i < month;i++)
		{
			sum += getNowMonthDays(year,i);
		}
		return sum;
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一修

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值