1 //輸入年份和月份,打印出這個月的日歷表 2 /* 3 1.1900年1月1日是星期一 4 2.計算輸入的年份距離1900年有多少天再計算當年1月1日距這個月有多少天 5 1) 6 3.總天數%7得出從星期幾開始 7 注:計算機中的時間最小到1900年,此外UNIX系統認為1970年1月1日0點是時間紀元。 8 so,在本程序中不考了1900年以前的年份了。有興趣的可以自己研究下。 9 */ 10 import java.util.Scanner; 11 class Calender{ 12 13 public static void main(String[] args){ 14 15 PRint(); 16 17 } 18 19 //打印輸出 20 public static void print(){ 21 Scanner sc = new Scanner(System.in); 22 System.out.println("請輸入年份:"); 23 int year = sc.nextInt(); 24 System.out.println("請輸入月份(1~12):"); 25 int month = sc.nextInt(); 26 27 int days = getDays(year, month);//getDays方法詳細請往下看 28 //days+1:day是總天數,輸入月份的總天數只是這個月之前的天數, 29 //加上1變為這個月開始的第一天 30 int week = days%7==0?1:days%7+1;//開始的第一天是星期幾 31 System.out.println("日/t一/t二/t三/t四/t五/t六"); 32 33 //輸出第一行(第一個星期)空出來部分 34 for(int i=1; i<=week; i++){ 35 System.out.print(" /t"); 36 } 37 38 //輸出第一行(第一個星期)各天 39 for(int i=1; i<=7-week; i++){ 40 System.out.print(i+"/t"); 41 } 42 43 System.out.println(); 44 45 //1~12月的個月天數 46 int monthDay = 0; 47 switch(month){ 48 case 2: 49 if(year%4==0&&year%100!=0 || year%400==0 ){ 50 monthDay=29; 51 }else{ 52 monthDay=28; 53 } 54 break; 55 56 case 4: 57 case 6: 58 case 9: 59 case 11: 60 monthDay=30; 61 break; 62 63 default : 64 monthDay=31; 65 break; 66 } 67 68 //輸出剩下的日期,從第二周開始了,所以是8-week 69 for(int i=8-week; i<=monthDay; i++){ 70 71 System.out.print(i+"/t"); 72 73 //每七天換一行則當日期能整除7就換行 74 if((i+week)%7==0){ 75 System.out.println(); 76 } 77 } 78 79 80 } 81 82 /* 83 計算當年當月的距1900年1.1的總天數 84 */ 85 public static int getDays(int year, int month){ 86 //判斷這年是閏年或者平年,得到年的總天數 87 int day1=0, day2=0; 88 89 for(int i=1900; i<year; i++){ 90 if(i%4==0&&i%100!=0 || i%400==0){ 91 day1+=366; 92 }else{ 93 day1+=365; 94 } 95 } 96 97 //得到月的總天數 98 for(int i=1; i<month; i++){ 99 switch(i){100 case 2:101 if(year%4==0&&year%100!=0 || year%400==0 ){102 day2+=29;103 }else{104 day2+=28;105 }106 break;107 108 case 4:109 case 6:110 case 9:111 case 11:112 day2+=30;113 break;114 115 default :116 day2+=31;117 break;118 }119 }120 121 return day1+day2;122 123 }124 125 }新聞熱點
疑難解答