找到一份好工作

万年历



打万年历,首先需要搞明白的一点是:如何确定每个月的一号是星期几,
因为只要判断了一号是星期几,这个月剩下的天数怎么填就能很好的确定
  已知:1900年 1月1号 是星期一
        那么 1900年 1月2号 是星期二
          1900年 1月3号 是星期三
             ..............

            1900年 1月7号 是星期日
              1900年 1月8号 是星期一
 是不是一直有这个递增规律?
  所以说我们就可以知道如何判断 这一天是星期几 ,就拿你输入的年份 和月份 距离 1900 年 1 月 1 号 有少天
  假设我们求出来的天数和是 sum ,那么你输入的这一年的这一月 就是 星期 sum%7 (一周有七天,从1900 年 1 月 1 号 开始
就是个死循环),所以说可以这么来判断那一天是星期几 ;注意:不管是算那一天是星期几都是从距离1900.1.1有多少天开始算的
要点:1. 当我们知道了 如何去判断 每个月中的任务 一天是星期几的时,也就是说,星期几 就会判断了,那么我如何打印这一个月的日历呢?
首先你要明白 不管是打印那一个月的日历,这一个月都是从 1号开始的,所以我们只要判断 1号是星期几,然后,剩下的天数用循环就可以输出
具体怎么输出,见下面的分析

解题思路:1. 用户输入 要打印的是 哪一年和那一月 :即:用户输入 year + month
2. 就如前面所说的 我们要打印这一个月的日历,首先要算总天数 ,通过总天数 确定 这个月 1 号 是星期几
总天数 = (year -1)年的天数 + (month-1)个月的天数 + 1 (要打印的那个月的1号)
对于年份来说,我们要判断 平闰年 来求这一年的总天数 ;对于月份来说,我们要判断 大、小、润、平月
3. 在判断了 1 号 是星期几还不够,我们要求的是将整个日历打出来,所以一个是输出格式

public class WanNianLi {
        public static void main(String[] args) {
            
            //用户输入:
            Scanner input = new Scanner(System.in);
            System.out.print("请输入一个年份:");
            int year = input.nextInt();
            System.out.print("请输入一个月份:");
            int month  = input.nextInt();
            // 算总天数
            int sum=1;
            //总天数 = (year -1)-1900年的天数 + (month-1)个月的天数 + 1 (要打印的那个月的1号)
                //年的天数
            for(int i=1900;i<year;i++){
                //平闰年
                if((i%4==0&&i%100!=0)|| i%400==0){
                    sum+=366;
                }else {
                    sum+=365;
                }
            }
                //月的天数
                
            int days;
            for(int i=1;i<month;i++){
                //大小月、平闰月
                if(i==4 || i==6 || i==9 || i==11){
                    sum+=30;
                    
                }else if(i==2){
                    if((year%4==0&&year%100!=0)|| year%400==0){
                        sum+=29;
                        
                    }else {
                        sum+=28;
                        
                    }
                }else {
                    sum+=31;
                    
                }
            }
            
            System.out.println(year+"年"+month+"月 1号是星期 "+sum%7);
            System.out.println("日\t一\t二\t三\t四\t五\t六");
            //求出要算的那个月的天数:
            if(month==2){
                if ((year%4==0&&year%100!=0)||year%400==0) {
                    days=29;
                }else {
                    days=28;
                }
            }else if(month==4 || month==6 || month==9||month==11) {
                days=30;
            }else {
                days=31;
            }
            for(int j=1;j<=sum%7;j++){  //对齐 1 号是星期几 前面就有几个换行符
                System.out.print("\t");
            }
            for(int i=1;i<=days;i++){
                System.out.print(i+"\t");
                if(sum%7==6){
                    System.out.println();
                }
                sum++;
            }
            
        }
}

 

posted on 2019-10-25 15:03  东方幻想乡  阅读(165)  评论(0)    收藏  举报

导航