猿编程发日历的方法可以分为以下几个步骤:
输入年份和月份
通过控制台或用户界面接收用户输入的年份和月份。
判断闰年
判断输入的年份是否是闰年,以便确定二月份的天数。闰年的判断规则是:能被4整除但不能被100整除,或者能被400整除。
计算月份的天数
根据输入的年份和月份,计算该月的天数。这可以通过一个数组来实现,数组中的每个元素对应一个月的天数,考虑到闰年二月有29天。
计算第一天是星期几
计算输入月份的第一天是星期几。这可以通过计算输入年份距离1900年1月1日的天数,再加上输入月份之前的天数,然后对7取余来实现。余数即为第一天是星期几(余数为0表示星期天)。
输出日历
按照格式输出该月的日历。通常日历的输出格式为星期几、日期、月份和年份。
```java
import java.util.Scanner;
public class CalendarGenerator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("输入年份: ");
int year = scanner.nextInt();
System.out.print("输入月份: ");
int month = scanner.nextInt();
// 判断闰年
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
int[] daysInMonth = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeapYear) {
daysInMonth = 29;
}
// 计算第一天是星期几
int daysSince1900 = 0;
for (int y = 1900; y < year; y++) {
daysSince1900 += isLeapYear(y) ? 366 : 365;
}
for (int m = 1; m < month; m++) {
daysSince1900 += daysInMonth[m];
}
int firstDayOfWeek = (daysSince1900 + 1) % 7;
// 输出日历
System.out.println("日 一 二 三 四 五 六");
for (int i = 0; i < firstDayOfWeek; i++) {
System.out.print("");
}
for (int day = 1; day <= daysInMonth[month]; day++) {
System.out.printf("%4d", day);
if ((day + firstDayOfWeek) % 7 == 0) {
System.out.println();
}
}
}
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
}
```
通过以上步骤和代码,你可以实现一个简单的日历生成器。根据具体需求,你可以进一步扩展和优化这个程序,例如添加日期选择、事件添加和编辑、提醒功能等。