Java练习源码04_打印日历

问题描述:

接收年月,输出当月日历,
( 已知1900年1月1日 星期一)
效果如下:
请选择年份:1998
请选择月份: 10

请选择年份:1998
请选择月份:10
星期日	星期一	星期二	星期三	星期四	星期五	星期六
								1		2		3
4		5		6		7		8		9		10
11		12		13		14		15		16		17
18		19		20		21		22		23		24
25		26		27		28		29		30		31

源码:

方法一、使用Calendar类

import java.util.Calendar;
import java.util.Scanner;

public class MyCalendar {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("请选择年份:");
		int year = sc.nextInt();
		System.out.print("请选择月份:");
		int month = sc.nextInt();
		
		PrintCanlendar(year,month);
	}
	//打印日历
	public static void PrintCanlendar(int year,int month) {
		System.out.print("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");

		Calendar calendar = Calendar.getInstance();
		calendar.set(year,month-1,1);		//!!!此处月份一定要减一
		//Calendar.DAY_OF_WEEK默认以星期天为第一天
		int weekday = calendar.get(Calendar.DAY_OF_WEEK);	//得到该月第一天是星期几
		
		calendar.set(year, month, 1);		//此处month没有减一!!!
        calendar.add(Calendar.DATE, -1);
		//得到该月最后一天是多少号,即该月有多少天
        int day = calendar.get(Calendar.DAY_OF_MONTH);
		
		//按照格式打印日历
		for(int i =0;i<weekday-1;i++)
			System.out.print("\t");
		for(int i = 1;i <= day ;i++) {
			System.out.print(i);
			if((i+weekday-1)%7==0)
				System.out.println();
			else
				System.out.print("\t");
		}
	}
}

方法二:不使用Calendar类

import java.util.Scanner;

public class MyCalendar {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.print("请选择年份:");
		int year = sc.nextInt();
		System.out.print("请选择月份:");
		int month = sc.nextInt();
		
		PrintCanlendar(year,month);
	}
	
	//打印日历
	public static void PrintCanlendar(int year,int month) {
		System.out.print("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n");
		int weekday = Caculate(year,month);//该月第一天是星期几
		int day = DayOfMonth(year,month);//该月有多少天
		
		for(int j =0;j<weekday;j++)
			System.out.print("\t");
		for(int i = 1;i <= day ;i++) {
			System.out.print(i);
			if((i+weekday)%7==0)
				System.out.println();
			else
				System.out.print("\t");
		}
	}
	//计算year年month月第一天是星期几
	public static int Caculate(int year,int month) {
		//保存此月第一天是星期几
		int weekday=0;
		//保存year年month月1日到1900年1月1日有多少天
		int sum_days = 0;
		
		//1900年1月1日到year年1月1日的天数
		for(int i=1900;i<year;i++) {
			if(isLeapYear(i))
				sum_days += 366;
			else
				sum_days += 365;
		}
		//year年1月1日到year年month月1日的天数
		for(int i =1;i<month;i++ )
			sum_days += DayOfMonth(year,i);
		//year年month月1日是星期几
		weekday = (sum_days +1 )%7;
		
		return weekday;
	}
	//判断是否是闰年
	public static boolean isLeapYear(int year) {
		if(year%4==0 && year %100!=0 || year%400==0)
			return true;
		else
			return false;
	}
	//计算每一个月有多少天
	public static int DayOfMonth(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;
	}
}
发布了34 篇原创文章 · 获赞 7 · 访问量 2207

猜你喜欢

转载自blog.csdn.net/qq_37717494/article/details/104484992
04_