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

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

1、题目

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

image.gif

2、代码

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;
    }
}

image.gif

3、测试验证

image.gif

image.gif

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

目录
相关文章
|
5月前
|
存储 Java
创建一个乘法练习题生成器 using Java
创建一个乘法练习题生成器 using Java
|
6月前
|
Java
JAVA跳转控制语句
JAVA跳转控制语句
76 1
|
6月前
|
人工智能 Java
Java练习题-输出二维数组对角线元素和
Java练习题-输出二维数组对角线元素和
|
5月前
|
Java
杨老师课堂_Java教程第三篇之控制语句
杨老师课堂_Java教程第三篇之控制语句
27 1
|
6月前
|
Java
Java的程序基本控制语句
Java的程序基本控制语句
|
5月前
|
存储 Java
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
Java基础手册(标识符 关键字 字面值 变量 数据类型 字符编码 运算符 控制语句 方法及方法重载和递归 面向对象与面向过程)
38 0
|
5月前
|
Java
java中强大的时间处理工具:Calendar类(日历类)
`Calendar`类是Java中用来处理日期和时间的类,提供了许多属性来获取日期和时间的不同部分,如年、月、日、小时等。`Calendar`的常用属性包括`YEAR`(年)、`MONTH`(月)、`DATE`/`DAY_OF_MONTH`(日)、`DAY_OF_YEAR`(一年中的第几天)、`DAY_OF_WEEK_IN_MONTH`(一月中第几个星期)、`DAY_OF_WEEK`/`WEEK_OF_MONTH`(星期)等。
92 0
|
6月前
|
Java
【JAVA基础篇教学】第三篇:Java循环控制语句
【JAVA基础篇教学】第三篇:Java循环控制语句
|
6月前
|
存储 Java 索引
Java练习题-获取数组元素最大值
Java练习题-获取数组元素最大值
Java练习题-获取数组元素最大值
|
6月前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
【5月更文挑战第2天】在自动化测试过程中,经常会遇到处理日期控件的点击问题。宏哥之前分享过一种方法,但如果输入框是`readonly`属性,这种方法就无法奏效了。不过,通过修改元素属性,依然可以实现自动化填写日期。首先,定位到日期输入框并移除`readonly`属性,然后使用`sendKeys`方法输入日期。这样,即使输入框设置了`readonly`,也能成功处理日期控件。
81 1