首页 > 代码库 > 算法,java代码实现打印万年历

算法,java代码实现打印万年历

 

万年历

以1900年1月1号星期一为时间原点
星期日 第一天
星期一 第二天
星期二 第三天
星期三 第四天
星期四 第五天
星期五 第六天
星期六 第七天
          

    1.计算出当前日期距离原点的天数(例:2016/9/18)

      2015到1900之间有多少个瑞年和平年-->count1
      技术分享
 
      2016年一月到八月的总天数-->count2
      本月的一号
      count = count1+count2+1

    2.计算出本月的一号是一周的第几天

       k = count%7;(打印一号前面有多少空格)

    3.计算出该月有多少天

       maxDays

    4.循环打印

       1.for(int i=1;i<=maxDays;i++)
       2.k充当指示器,到每周的第七天自动换行
       技术分享
 
    
技术分享
 1 package com.bjsxt.game;
 2 import java.util.Scanner;
 3 public class Calendar {
 4     public static boolean isLeapYear(int year){
 5         if(year%4==0&&year%100!=0 || year%400==0){
 6             return true;
 7         }
 8             return false;
 9     }
10     
11     //计算当前月份的最大天数
12     public static int maxDays(int month,int year){
13         
14         int maxDays;
15         if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12)
16                 maxDays =  31;
17         else if(month==4 || month==6 || month==9 || month==11)
18                 maxDays =  30;
19         else{
20                 if(isLeapYear(year))
21                     maxDays = 29;
22                 else
23                     maxDays = 28;
24         } 
25         return maxDays;
26     }
27     
28     //计算当前月份一号是一周的第几天
29     public static int count(int month,int year){
30         int k;           //表示当前的输入值是一周的第几天
31         int r = 0, p = 0;
32         int count;       //表示距离1970.1.1有多少天
33         //计算当前年份之前的瑞年和平年有多少个
34         for(int i=1900;i<year;i++){
35             if(isLeapYear(i))
36                 r++;
37             else
38                 p++;
39         }
40         count = 366*r+365*p;
41         //判断当前月份之前的总天数
42         for(int i=1;i<month;i++){
43                 if(i==2){
44                     if(isLeapYear(year))
45                         count = count + 29;
46                     else
47                         count = count + 28;
48                 }
49                 else if(i==1 || i==3 || i==5 || i==7 || i==8 || i==10 || i==12)
50                     count = count + 31;
51                 else
52                     count =  count + 30;        
53         }
54         k = (count+1)%7+1;
55         return k;
56     }
57     public static void main(String[] args) {
58         Scanner input =  new Scanner(System.in);
59         
60         System.out.print("请输入年:");
61         int year = input.nextInt();
62         
63         System.out.print("请输入月:");
64         int month = input.nextInt();
65         
66         System.out.print("请输入日:");
67         int day = input.nextInt();
68         
69         int maxDays =  maxDays(month,year); //计算当前输入的月份最大值是多少天
70         int k = count(month, year);         //计算当前月份的1号是第几天
71                 
72         System.out.println("日\t一\t二\t三\t四\t五\t六");
73         for(int i=0;i<k-1;i++){
74             System.out.print(" \t");
75         }
76         for(int i=1;i<=maxDays;i++){
77             System.out.print(i+"\t");
78             if(k%7 == 0){
79                 System.out.println("\n");
80                 k = 0;
81             }
82             k++;
83         }
84     }
85 }
View Code
 

算法,java代码实现打印万年历