java学习实例---生成指定年份和月份的日历

java学习实例—生成指定年份和月份的日历

在这里插入图片描述

//问题:输入一个年份和月份,输出是本月的日历
package study20231226;   //包名
import java.util.Scanner;     //导入了Scanner类,它可以用来读取用户的输入。
public class TestCalender {       //定义一个名为TestCalender的公共类。
    public static void main(String[] args) {    //main方法
        //1.获取到输入的年和月
        Scanner input = new Scanner(System.in);   //创建一个Scanner对象,用于读取用户的输入
        System.out.println("请输入年份:");
        int year = input.nextInt();    //从用户输入中读取一个整数,并将其赋值给变量year。
        System.out.println("请输入月份:");
        int month = input.nextInt();
        // 调用生成日历的方法
        if (year <1 || month<1 || month >12) {
            System.out.println("无效的年份或月份:");
            return;
        }
        printCalendar(year, month);    //调用printCalendar方法,传递了用户输入的年份和月份作为参数。
    }
    public static void printCalendar(int year, int month) {  //定义printCalendar为公共静态方法,该方法接受两个整数类型的参数:年份和月份。
        // 创建一个用于存储日期的数组
        int[] days = new int[42];  //创建一个长度为42的整型数组,用于存储日期。
        int day = 1;   //初始化一个变量day,表示当前日期。
        // 计算该月的第一天是星期几
        int dayOfWeek = getDayOfWeek(year,month,1);  //调用了getDayOfWeek方法,计算给定年份和月份的第一天是星期几,并将结果赋值给变量dayOfWeek。
        // 计算该月的天数
        int maxDay =getMaxDayOfMonth(year,month);  //调用了getMaxDayOfMonth方法,计算给定年份和月份的天数,并将结果赋值给变量maxDay。
        // 填充日期数组
        for (int i = 0; i < maxDay; i++) {   //for循环,用于填充日期数组。循环从0开始,每次递增1,直到maxDay-1为止。
            days[i+dayOfWeek] = day++; //将当前日期day赋值给日期数组days中对应的位置,并将day递增1。
        }
        // 输出日历头部
        System.out.println("      Sun Mon Tue Wed Thu Fri Sat");
        System.out.println("      === === === === === === ===");
        // 输出日期
        int index = 0;    //定义一个整型变量index,并将其初始化为0。表示它指向数组或列表中的第一个元素。
        for (int i = 1; i <= 6; i++) {  //for循环,用于输出日期。外层循环控制输出的行数,内层循环控制输出的列数。
            System.out.print(i + "   ");  //输出行号,并在后面添加一些空格。
            for (int j = 0; j < 7; j++) {  //
                if (index < days.length && days[index]!=0) {  //条件判断语句,用于判断当前位置是否有日期需要输出。

                    System.out.printf("%4d",days[index] );  // 使用格式化输出,将日期按照指定的格式输出。
                } else {
                    System.out.print("    ");   // 这行代码输出一些空格,用于对齐日期。
                }
                index++;
            }
            System.out.println();
        }
    }
    // 获取某个日期是星期几的方法
    public static int getDayOfWeek(int year, int month, int day) {
        //名为getDayOfWeek的公共静态方法,用于计算给定日期是星期几。它接受三个整数类型的参数:年份、月份和日期。
        if (month < 3) {
            month += 12;
            year--;
        }
        int century = year / 100;
        year %= 100;
        int week = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400 + century / 4 - 2 * century) % 7;
        return (week + 6) % 7;
    }
    // 获取某个月的天数的方法
    public static int getMaxDayOfMonth(int year, int month) {
        //名为getMaxDayOfMonth的公共静态方法,用于计算给定年份和月份的天数。它接受两个整数类型的参数:年份和月份。
        if (month == 2) {
            if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
                return 29;
            } else {
                return 28;
            }
        } else if (month == 4 || month == 6 || month == 9 || month == 11) {
            return 30;
        } else {
            return 31;
        }
    }
}

1.

在 Java 中,Scanner input = new Scanner(System.in); 是用于创建一个 Scanner 对象的语句,该对象用于从标准输入(通常是键盘)读取输入数据。

具体解释如下:

  • Scanner 是 Java 提供的一个类,用于读取输入的文本数据。
  • input 是一个变量,用于保存创建的 Scanner 对象。
  • new Scanner(System.in):通过调用 Scanner 类的构造函数,创建一个新的 Scanner 对象,并将其初始化为从标准输入(通常是键盘)读取数据。

创建 Scanner 对象后,可以使用它来读取用户输入的各种数据类型,例如字符串、整数、浮点数等。可以使用 nextXXX() 方法来读取特定类型的数据,其中 XXX 表示要读取的数据类型(例如,nextInt() 用于读取整数,nextDouble() 用于读取浮点数,next() 用于读取字符串等)。

2

printCalendar(year, month) 是一个函数调用,它调用了名为 printCalendar 的函数,并传递了两个参数:yearmonth

这个函数可用于打印日历,其中 year 表示年份,month 表示月份。函数会根据给定的年份和月份生成相应的日历内容,并将其打印输出。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值