万年历(1900-2900之间)

package test;  
/* 
 * 输出万年历 
 * 设定1900.01.01为起点 
    1970~1979 
    1970 4  
    1971 5 
    1972 0 
    1973 1 
    1974 2 
    1975 3 
    1976 5 
    1977 6 
    1978 0 
    1979 1 
 */  
import java.util.Scanner;  
public class PermanentCalendar {  
    static boolean LeapYear(int year){ //判断闰年  
        if(year%400==0 || (year%4==0 && year%100!=0)){ //是闰年  
            return true;   
        }  
          
        else{  
            return false;  
        }  
    }  
    static final int N = 1900; //用N表示起始年份  
    public static void main(String[] args){  
        int n = 1;//1900年1月1日 是星期一  
        int month[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; //用来存储月份的天数  
        int year[] = new int[1001];  //用来存储每年1月1日是星期几  
        year[0] = n;  
        for(int i=1;i<year.length;i++){  
            int days = 365;  
            if(LeapYear(i+N-1)){//如果它的前一年是闰年则需要加366  
                days = 366;  
                year[i] = (year[i-1] + days)%7;  
            }  
            else{  
                year[i] = (year[i-1] + days)%7;  
            }  
        }  
        /* 
        for(int i=0;i<10;i++){ 
            System.out.println(year[i]); 
        } 
        */  
        int Month ,Year;  
        Scanner in = new Scanner(System.in);  
        System.out.println("请输入年份在(1900~2900之间):");  
        Year = in.nextInt();  
        if(Year>2900 || Year<1900){  
            System.out.println("输入年份不合法,请重新输入!");  
            return;  
        }  
        //System.out.println(year[Year-1970]);  
        System.out.println("请输入月份(1~12之间):");  
        Month = in.nextInt();  
        if(Month>12 || Month<1){  
            System.out.println("输入月份不合法,请重新输入!");  
            return;  
        }  
        System.out.println("星期日     " +"星期一     "+"星期二    "+"星期三     "+"星期四     "+"星期五     "+"星期六   ");  
        System.out.println();  
        if(LeapYear(Year)){ //如果是闰年,2月改为29号  
            month[2] = 29;  
        }  
        int day=0; //用来记录当前月的一号是今年的第几天  
        for(int i=1;i<Month;i++){  
            day = day + month[i];  
        }  
          
        day = (year[Year-N]+day)%7;  
        for(int i=0;i<7;i++){//输出控制  
            if(day == i){  
                System.out.print("  " + 1 + "   ");  
                if(day == 6){  
                    System.out.println();  
                }  
                break;  
            }  
            else{  
                System.out.print("      ");  
            }  
        }  
        for(int i=2;i<=month[Month];i++){  
            if(i<10){  
                System.out.print("  " + i + "   ");  
            }  
            else{  
                System.out.print(" " + i + "   ");  
            }  
            if((day+i-1)%7 == 6){  
                System.out.println();  
            }  
        }  
    }  
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值