一.功能
根据用户输入的年份和月份,在控制台打印出对应月份的日历。二.算法
要打印一个月的日历只需要知道两件事。1.这个月第一天是星期几
本例子中,使用蔡勒公式,判断某年某月的一号是周几,关于蔡勒公式不了解的同学可以百度一下,这里不作讲解。使用"蔡勒公式"计算某月第一天是周几的好处有:(1).不用选择参考年月日;(2)不用计算参考日到计算日的间隔天数;(3)不用计算一年有多少天。2.这个月有多少天
使用switch-case语句进行判断,大月31天,小月30天,2月闰年29天,平年28天。三.源码
import java.util.Scanner;public class DateUtils{
/*判断是否为闰年*/ public boolean isleap(int year){ if((year%4==0)&&(year%100!=0)||year%400==0) return true; else return false; } /*判断这个月有多少天*/ public int daysOfmonth(int year,int month){ int days = 0; switch(month){ /*大月*/ case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break; /*小月*/ case 4: case 6: case 9: case 11: days=30;break; /*二月*/ case 2:if(isleap(year)==true) days=29; else days=28;break; default: System.out.println("程序错误:输入的月份有误!"); return 0; } return days; }/** * 蔡勒公式,判断某年某月的一号是周几 * @param year 年 * @param month 月 * @return week(0,6) */ private int weekOffirst(int year,int month){ int m=month; int d=1; if(month<=2){ /*对小于2的月份进行修正*/ year--; m=month+12; } int y=year % 100; int c=year/100;//世纪数减1 int w=(y+y/4+c/4-2*c+(13*(m+1)/5)+d-1)%7; if(w < 0) /*修正计算结果是负数的情况*/ w+= 7; return w; } /*打印日历*/ public void dataprint(int year,int month,int week){ System.out.println("\t\t"+year+"年"+" "+month+"月"); System.out.println("日\t一\t二\t三\t四\t五\t六"); int[][] data = new int[6][7] ; int daynum=1; for(int i=0;daynum<=daysOfmonth(year,month);i++){ for(int j=0;j<7&&daynum<=daysOfmonth(year,month);j++){ if(i==0&&j<week) { data[i][j]=0; System.out.print("\t"); } else { data[i][j]=daynum++; System.out.print(data[i][j]+"\t"); } }System.out.println(); } } /*主函数入口*/ public static void main(String[] args){ DateUtils du=new DateUtils(); Scanner scn=new Scanner(System.in); System.out.print("输入要打印的年:"); int year=scn.nextInt(); System.out.print("输入要打印的月:"); int month=scn.nextInt(); scn.close(); int week; week=du.weekOffirst(year,month); du.dataprint(year, month, week); }}
效果预览