应用方法,用Java打印日历。
1 import java.util.Scanner; 2 3 /** 4 *打印1900年之后的日历 5 *@author:Archer-LCY 6 *@date:2018年1月19日上午10:20:39 7 */ 8 public class Calendal { 9 //注意全局变量声明的位置 10 /**用户输入的年份*/ 11 public static int year = Integer.MAX_VALUE; 12 /**用户输入的月份*/ 13 public static int month = Integer.MAX_VALUE; 14 /**每月的天数*/ 15 public static int [] dayofmonth= {31,28,31,30,31,30,31,31,30,31,30,31}; 16 public static void main(String[] args) { 17 18 PrintCalendal(); 19 } 20 21 public static void PrintCalendal() { 22 // TODO Auto-generated method stub 23 //1、让用户输入年月份 24 InputYearandMonth(); 25 //2、计算1900-1-1到用户输入年份的天数 26 //2-1计算各年的总天数 27 //2-2计算各月的天数之和 28 int sum=GetsumdayofYear(); 29 sum+=GetsumdayofMonth(); 30 //计算每月的一号是星期几 31 int dayofweek=sum%7+1; 32 33 //3、打印年月份(英文),打印月份的标题(星期一到星期日) 34 PrintMonthTitle(); 35 //4、根据某年某月一号星期几,打印月历功能 36 PrintCalendalContent(dayofweek); 37 } 38 /** 39 * 根据当月一号打印月历内容 40 * @param dayofweek 当月一号星期几 41 */ 42 private static void PrintCalendalContent(int dayofweek) { 43 // TODO Auto-generated method stub 44 for(int i=0;i<dayofweek-1;i++) { 45 System.out.print("\\t"); 46 } 47 for(int i=0;i<dayofmonth[month-1];i++) { 48 System.out.print((i+1)); 49 if((dayofweek+i)%7==0){ 50 System.out.print("\\n"); 51 52 }else 53 System.out.print("\\t"); 54 } 55 } 56 57 /** 58 * 3、打印年月份(英文),打印月份的标题(星期一到星期日) 59 */ 60 private static void PrintMonthTitle() { 61 // TODO Auto-generated method stub 62 String[] monthofname= {"January","February","March","April","May","June","July","August","September","October","November","December"}; 63 System.out.println(year+"\\t"+monthofname[month-1]); 64 String[] weekdays= {"Mon","Tue","Wed","Thu","Fir","Sta","Sun"}; 65 for(int i=0;i< weekdays.length;i++) { 66 System.out.print(weekdays[i]+"\\t"); 67 } 68 System.out.println(); 69 } 70 71 /** 72 * 计算1900-year整年的总天数 73 * @return sum总天数 74 */ 75 private static int GetsumdayofYear() { 76 // TODO Auto-generated method stub 77 //判断是否输入年份 78 if(year==Integer.MAX_VALUE) {//用户没有输入,重新调用 79 System.out.println("输入错误请从新输入!"); 80 InputYearandMonth(); 81 } 82 int sum=0; 83 for(int i=1900;i<year;i++) { 84 sum+=365; 85 //判断是不是闰年 86 if(isLeapYear(i)) { 87 sum++;//闰年多加一年 88 } 89 } 90 return sum; 91 } 92 93 /** 94 * 判断是不是闰年 95 * @param year 要判断的年份 96 * @return 是闰年返回true 97 */ 98 private static boolean isLeapYear(int year ) {//此处一定要加参数year,表示的是传入的参数值而不是全局变量中的year值 99 return year%400==0||year%4==0&&year%100!=0;//先算与再算或 100 } 101 102 /** 103 * 计算月份天数 104 * @return sum返回year这一年月份的总天数 105 */ 106 private static int GetsumdayofMonth() { 107 // TODO Auto-generated method stub 108 109 int sum=0; 110 for(int i=0;i<month-1;i++) { 111 sum+=dayofmonth[i]; 112 if(isLeapYear(year)&&month>=3) { 113 sum++; 114 } 115 } 116 return sum; 117 } 118 119 public Calendal() { 120 // TODO Auto-generated constructor stub 121 } 122 123 /** 124 * 用户输入年份和月份 125 */ 126 private static void InputYearandMonth() { 127 // TODO Auto-generated method stub 128 Scanner input =new Scanner(System.in); 129 System.out.print("请输入年份:"); 130 // int year=input.nextInt();//局部变量 131 year=input.nextInt(); 132 System.out.print("请输入月份:"); 133 month = input.nextInt(); 134 //节省资源 135 input.close(); 136 input=null; 137 } 138 }
运行结果: