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

2024-03-05 16:18:09 浏览数 (2)

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、测试验证

若本文有帮助到阅读本文的同学,欢迎点赞、关注、收藏,互相学习交流。 

0 人点赞