栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用JAVA语言实现一个日历项目

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用JAVA语言实现一个日历项目

首先给大家讲解一下我 们平常所看到的日历它是怎么打印出来的.

在这要给大家扩展一点东西了.

在这我们看到,要实现一个日历的打印,就是要知道它每个月一号前面的空格是怎么算出来的.那么在日历中,每个月一号前面的空格都是从1900年开始到当前月的天数对7取余得到.

在这还要注重说明一下:闰年的天数是每年366天.平年的天数是每年365,闰年就是当前年的年数能被四整除,但是它不能被100整除或者能够被400整除的年份.

在这我们要提醒每个月的天数是不一样的.1,3,5,7,810,11每个月都死31天.4,6,9,12都是30天,还有平年的2月是28天,闰年的2月是29天.

好 我们之前的准备条件都准备充分了,那么我们接下来来写代码.

首先我们先定义几个我们用到的变量,包括所有的天数,每个月的天数,当前年前面月份的天数,还有我们所有天数对7取余的余数,现在年份,还有当前的月份.

 
int alldays = 0;
//保存当前年当前月份的前面的所有月份的天数
int allmonthdays = 0;
//保存每个月的天数
int monthdays = 0;
//保存余数remainder(每个月份一号前面的空格数,总天数对7求余数)
int remainder = 0;
//保存当前年份
int nowyear = 2022;
//保存当前月
int nowmonth = 4;

那么我们这个例子说的是我们2022年的4月份的日历,那么我们接下来算从1900年到2021年的所有的天数.

//我们来计算从1900年到2021年的所有的天数
        for (int i =1900;i < nowyear;i++){
            //在这我们要判断一下年份是不是闰年,是闰年我们就给天数加366
            if (i % 4 ==0&&i %100 != 0||i %400 ==0){
                alldays += 366;
            }
            //如果不是闰年就给天数加上365
            else{
                alldays += 365;
            }
        }

此时我们就算出了1900年到2021年的所有的天数,接下来我们就该计算到当前月的天数了

 //计算到当前月的天数1,3,5,7,8,10,11,一个月是31天4,6,9,11,一个月是30天,闰年2月29,平年28
        for (int i = 1;i < nowmonth;i++){
            if (i == 1||i == 3||i == 5||i == 7||i == 8||i == 10||i == 11){
                alldays += 31;
            }else if (i == 4||i == 6||i == 9||i == 12){
                alldays += 30;
            }else if (nowyear %4 ==0&&nowyear %100 != 0||nowyear % 400 ==0){
                alldays += 29;
            }else{
                alldays += 28;
            }
        }

到这我们就算出来了从1900年到2022年3月份的所有的天数.

接下来我们就来算我们要计算的月份的日历前面的空格有多少了

//月份前面的空格计算.所有的天数对7取余
        remainder = alldays%7;
        System.out.println(remainder);

 

在这我们进行了验证 看出开此时的 空格的个数是对的.

接下来我们就要计算当前月的天数是多少了

if (nowmonth == 1||nowmonth == 3||nowmonth == 5||nowmonth == 7||nowmonth == 8||nowmonth == 10||nowmonth == 11){
                monthdays = 31;
            }else if (nowmonth == 4||nowmonth == 6||nowmonth == 9||nowmonth == 12){
                monthdays = 30;
            }else if (nowyear %4 ==0&&nowyear %100 != 0||nowyear % 400 ==0){
                monthdays = 29;
            }else{
                monthdays = 28;
            }
            //验证当前月份的天数是否正确
           system.out.println(monthdays);

下面我们给大家验证以下

此时输出的结果是30,说明我们的代码没有问题

我们所有的准备工作都做好了,接下来我们就打印日历

 

//打印前面的星期数
System.out.print("一t二t三t四t五t六t日t");
        System.out.println();
        //打印前面的空格
        for (int i = 1;i <= remainder;i++){
            System.out.print("t");
        }
        //打印月份的号数
        for (int i = 1;i <= monthdays;i++){
            //在这我们要提醒,我们日期的打印的时候,是对余数加上号数对7取余,满7换行,余数不为0就不换行,为0就换行
            if ((remainder +i) % 7 == 0 ){
                System.out.println(i+"t");
            }else{
                System.out.print(i+"t");
            }
        }

 那么我们四月份的日历就打印完成了.

下面给大家展示完整的代码:

public class doem1 {
    public static void main(String[] args) {
        
        int alldays = 0;
        //保存当前年当前月份的前面的所有月份的天数
        int allmonthdays = 0;
        //保存每个月的天数
        int monthdays = 0;
        //保存余数remainder(每个月份一号前面的空格数,总天数对7求余数)
        int remainder = 0;
        //保存当前年份
        int nowyear = 2022;
        //保存当前月
        int nowmonth = 4;


        //我们来计算从1900年到2021年的所有的天数
        for (int i =1900;i < nowyear;i++){
            //在这我们要判断一下年份是不是闰年,是闰年我们就给天数加366
            if (i % 4 ==0&&i %100 != 0||i %400 ==0){
                alldays += 366;
            }
            //如果不是闰年就给天数加上365
            else{
                alldays += 365;
            }
        }
        //计算到当前月的天数1,3,5,7,8,10,11,一个月是31天4,6,9,11,一个月是30天,闰年2月29,平年28
        for (int i = 1;i < nowmonth;i++){
            if (i == 1||i == 3||i == 5||i == 7||i == 8||i == 10||i == 11){
                alldays += 31;
            }else if (i == 4||i == 6||i == 9||i == 12){
                alldays += 30;
            }else if (nowyear %4 ==0&&nowyear %100 != 0||nowyear % 400 ==0){
                alldays += 29;
            }else{
                alldays += 28;
            }
        }
        //月份前面的空格计算.所有的天数对7取余
        remainder = alldays%7;
       // System.out.println(remainder);
        //计算本月份的天数
            if (nowmonth == 1||nowmonth == 3||nowmonth == 5||nowmonth == 7||nowmonth == 8||nowmonth == 10||nowmonth == 11){
                monthdays = 31;
            }else if (nowmonth == 4||nowmonth == 6||nowmonth == 9||nowmonth == 12){
                monthdays = 30;
            }else if (nowyear %4 ==0&&nowyear %100 != 0||nowyear % 400 ==0){
                monthdays = 29;
            }else{
                monthdays = 28;
            }
        //System.out.println(monthdays);
        System.out.print("一t二t三t四t五t六t日t");
        System.out.println();
        //打印前面的空格
        for (int i = 1;i <= remainder;i++){
            System.out.print("t");
        }
        //打印月份的号数
        for (int i = 1;i <= monthdays;i++){
            //在这我们要提醒,我们日期的打印的时候,是对余数加上号数对7取余,满7换行,余数不为0就不换行,为0就换行
            if ((remainder +i) % 7 == 0 ){
                System.out.println(i+"t");
            }else{
                System.out.print(i+"t");
            }
        }
    }
}

要是大家想要打印别的月份的日历,可以把nowmonth的值换了,要是想打印你输入的月份的话,大家可以使用scanner函数

Scanner sc = new Scanner(System.in);
int nowmonth = sc.nextInt();

如果说你要打印一整年的日历,那么我们可以使用一个for循环,让程序循环12次句可以了

好,我们本次的分享到这就结束了.期待我们下次的见面.

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号