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
的函数,并传递了两个参数:year
和 month
。
这个函数可用于打印日历,其中 year
表示年份,month
表示月份。函数会根据给定的年份和月份生成相应的日历内容,并将其打印输出。