
代码如下:
import java.util.Scanner; /* ?* 练习打印万年历 ?*/ public class Demo36 { public static void main(String[] args) { //从键盘上接收一个年月 Scanner sc=new Scanner(System.in); System.out.println("请输入年和月:"); int year=sc.nextInt(); int month=sc.nextInt(); //打印这月的日历 printCalendar(year,month); } private static void printCalendar(int year,int month) { System.out.println("日t一t二t三t四t五t六"); //这个月的第一天是星期几 int fromDay=getWeekday(year,month,1); //打印这个月第一天之前的空白 for(int i=1;i<=fromDay;i++) { System.out.print("t"); } int count=fromDay; //定义变量统计打印的天数 //打印这个月的第一天 for(int day=1;day<=getDaysOfMonth(year,month);day++) { System.out.print(day+"t"); count++; if(count%7==0) System.out.println(""); } } //返回year年month月day天是星期几,数字0代表星期日,1~6代表星期一~星期六 private static int getWeekday(int year,int month,int day) { //先计算900年1月1日到指定year年month月day日共有多少天 int sum=getDaysFrom19000101(year,day); return sum%7; } private static int getDaysFrom19000101(int year,int day) { int sum=0; //先计算1900-1-1到year-1年12月31日共有多少天 for(int y=1900;y<year;y++) { sum+=getDaysOfYear(y); } //再加上当年的天数 sum+=getDaysToDateInCurrentYear(year,day); return sum; } //计算当年从1月1日到指定的month月day日共有多少天 private static int getDaysToDateInCurrentYear(int year,int day) { int sum=0; //累加前month-1个月的天数 for(int m=1;m<month;m++) { sum+=getDaysOfMonth(year,m); } //累加当月的天数 return sum+day; } //计算year年m月有多少天 private static int getDaysOfMonth(int year,int m) { switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if(isLeapYear(year)) return 29; else? return 28; } return 0; } //计算每年的天数 private static int getDaysOfYear(int y) { if(isLeapYear(y)) { return 366; } return 365; } //判断某一年是否为闰年 private static boolean isLeapYear(int y) { if(y%4==0&&y%100!=0||y%400==0) return true; return false; } }
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|