前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >java实现万年历[通俗易懂]

java实现万年历[通俗易懂]

作者头像
全栈程序员站长
发布2022-09-06 14:00:35
发布2022-09-06 14:00:35
1.2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

万年历

代码实现

代码语言:javascript
代码运行次数:0
复制
package com.zll;
​
import java.util.Scanner;
​
/**
 * 总结:遇到的bug把传入判断年份的日期都传成输入的year了,应该传入要计算的每一年,所以导致
 * 计算年份时的不正确所以总天数一直不对。
 */
public class Calendar {
    public static void main(String[] args) {
        //1900.1~~1900.2总天数 一年是365天
        // 1、3、5、7、8、10、12月每月31天
        //4,6,9,11为30天
        // 2月闰年29天,不是闰年就是28天。
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入年份:");
        int year=sc.nextInt();
        System.out.println("请输入月份:");
        int month=sc.nextInt();
        long day=0;//每月有多少天
        long sum=0;//总天数
        for(int i=1900;i<=year;i++){//循环从1900年到你输入年的多少天,不包括输入月份的天数
            if(i==year){//计算了你输入年的月份的天数
                long t;//计算输入月份返回的天数
                for(int z=1;z<month;z++){//从1990年1月开始,就是0天,month小于你月份
                    t=Calday(z,day,i);
                    sum+=t;
               }
           }else{//这个是计算年份的天数
//               long d;
//               for(int j=1;j<=12;j++){
//                   d=Calday(j,day,i);
//                   sum+=d;
//               }
                //优化一下
                boolean flag=year(i);//调用判断闰年的函数year
                if(flag){
                    sum+=366;//返回true为闰年
               }else {
                    sum+=365;
               }
           }
       }
        switch(month){//判断你输入月份的天数,并打印出来
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                day=31;
                break;
            case 4: case 6: case 9: case 11:
                day=30;
                break;
            case 2:
                boolean flag=year(year);
                if(flag==true){
                    day=29;
               }else{
                    day=28;
               }
                break;
       }
        printCal(day,sum);//调用打印方法
        System.out.println("\n\n总天数:"+sum);
   }
​
    /**
     * 打印输出这个月的日期
     * @param day 这个月有多少天
     * @param sum 总天数
     */
    public static void printCal(long day,long sum){
        System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
        int k3=(int)((sum+1)%7);//星期几
        for(int i=1;i<=day;i++){//动态显示i<=多少天
            if(i==1){
                for(int j=0;j<k3;j++){
                    System.out.print("\t\t");
               }
           }
            System.out.print(i+"\t\t");
            if((sum+i)%7==6){
                System.out.println();
           }
​
       }
​
   }
​
    /**
     * 计算闰年
     * @param year
     * @return boolean类型的如果为true则为闰年
     */
    public static boolean year(int year){
        if((year%4==0 && year%100!=0) || (year%400==0)){
            return true;
       }
        return false;
   }
​
    /**
     * 计算每个月有多少天
     * @param j 传入的月份
     * @param day 这个月有多少天
     * @param year 传入你要计算的年
     * @return
     */
    public static long Calday(int j,long day,int year){
        switch (j){
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                day=31;
                break;
            case 4: case 6: case 9: case 11:
                day=30;
                break;
            case 2:
                boolean flag=year(year);
                if(flag==true){
                    day=29;
               }else {
                    day=28;
               }
                break;
       }
        return day;
​
   }
}
​

运行截图

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155272.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 万年历
    • 代码实现
    • 运行截图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档