前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java练习题:控制语句_打印日历

Java练习题:控制语句_打印日历

作者头像
GoodTime
发布2024-03-05 16:18:09
880
发布2024-03-05 16:18:09
举报

1、题目

已知1900年1月1日是星期一,请用户输入查询的年份以及月份,查询出对应的万年历,示例如下图所示:

2、代码

代码语言:javascript
复制
import java.util.Scanner;

public class Test { // 类名要与文件名保持一致
    public static void main(String[] args) {
        System.out.println("********** 欢迎使用万年历 **********");
        // 创建Scanner类型的对象 input 使用关键字new来创建对象,System.in 输入流 指代输入设备
        Scanner input = new Scanner(System.in);
        System.out.print("请输入查询的年份:");
        int year = input.nextInt(); // 后期优化:只能输入大于1900的年份且为整数
        System.out.print("请输入查询的月份:");
        int month = input.nextInt();
        input.close();
        // 总天数
        int sumDay = 0;
        int yearDays = 0;
        int beforeInputMonthDay = 0; // 输入月份的前面月对应天数
        // 计算1900到输入查询年份的天数(输入年前的天数)
        for (int i = 1900; i < year; i++) {
            // 计算1900年到输入查询年份 前一年 的天数
            if (IsLeapYear(i)) {
                yearDays += 366;
            } else {
                yearDays += 365;
            }
        }
        // 计算输入查询年份对应输入月份前的天数(输入月前的天数)
        for (int j = 1; j < month; j++) {
            beforeInputMonthDay += weekDay(j, year);
        }
        // 计算输入月的天数
        int inputMonthDay = weekDay(month, year);
        sumDay = yearDays + beforeInputMonthDay;
        // 计算查询的月份1号是星期几
        int weekDay1st = sumDay % 7 + 1;
        // 打印日历
        System.out.println("一\t二\t三\t四\t五\t六\t日");
        for (int i = 1; i < weekDay1st; i++) {
            System.out.print(" \t");
        }
        for (int i = 1; i <= inputMonthDay; i++) { // 1号开始展示,所有i从1开始
            System.out.print(i + "\t");
            if ((i - 1 + weekDay1st) % 7 == 0) { // i从1开始,数组索引小标从0开始,所有这里要减1
                System.out.println();
            }
        }
    }

    // 判断是否是闰年
    public static boolean IsLeapYear(int year) {
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
            return true;
        else
            return false;
    }

    // 判断每个月的天数(2月份需要判断是否是闰年)
    public static int weekDay(int month, int year) {
        int monthday = 0;
        switch (month) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                monthday = 31;
                break;
            case 2:
                if (IsLeapYear(year))
                    monthday = 29;
                else
                    monthday = 28;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                monthday = 30;
                break;
            default:
                System.out.print("请输入1-12月份");
                break;
        }
        return monthday;
    }
}

3、测试验证

若本文有帮助到阅读本文的同学,欢迎点赞、关注、收藏,互相学习交流。 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 若本文有帮助到阅读本文的同学,欢迎点赞、关注、收藏,互相学习交流。 
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档