java根据用户输入的年份与月份 打印日历图(1900年1月1日是星期一)
时间: 2023-09-24 09:06:46 浏览: 87
### 回答1:
好的,我会给出一个 Java 程序来帮助您打印日历图。
首先,我们需要一个函数来计算给定年份和月份的天数。我们可以使用 Java 的 `Calendar` 类来实现这一点。
```
import java.util.Calendar;
public static int getDaysInMonth(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
```
然后,我们可以使用这个函数来打印日历图。我们还需要一个函数来计算给定年份和月份的第一天是星期几。
```
import java.util.Calendar;
public static int getFirstDayOfWeek(int year, int month) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.get(Calendar.DAY_OF_WEEK);
}
```
现在,我们可以使用这两个函数来打印日历图。首先,我们打印月份的名称和年份,然后打印星期的名称。
```
import java.util.Calendar;
public static void printCalendar(int year, int month) {
// 获取当前月份的天数
int daysInMonth = getDaysInMonth(year, month);
// 获取当前月份第一天是星期几
int firstDayOfWeek = getFirstDayOfWeek(year, month);
// 打印月份名称和年份
System.out.println(getMonthName(month) + " " + year);
// 打印星期名称
System.out.println("Su Mo Tu We Th Fr Sa");
// 打印空白日期
for (int i = 1; i < firstDayOfWeek; i++) {
System.out.print(" "
### 回答2:
实现以上功能可以采用以下步骤:
1. 首先,要根据用户输入的年份和月份来确定该月的天数。可以使用Java的Calendar类来获得某个月的天数。使用如下代码获取某年某月的天数:
```java
int year = 2021; // 用户输入的年份
int month = 8; // 用户输入的月份
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
```
2. 然后,要确定起始日期是星期几,根据题目的条件,1900年1月1日是星期一,所以可以计算从1900年1月1日到用户输入的年份和月份所表示的日期的总天数,并对7取模得到当前月份的起始日期的星期几。使用如下代码计算:
```java
int totalDays = 0;
for (int i = 1900; i < year; i++) {
if (calendar.isLeapYear(i)) { // 判断是否为闰年
totalDays += 366;
} else {
totalDays += 365;
}
}
for (int i = 1; i < month; i++) {
calendar.set(year, i - 1, 1);
totalDays += calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
}
int startDayOfWeek = (totalDays + 1) % 7; // 计算当前月份的起始日期的星期几,星期一为0,星期二为1,依此类推
```
3. 接下来,可以使用循环打印日历图。使用如下代码打印:
```java
System.out.println("星期一 星期二 星期三 星期四 星期五 星期六 星期日");
for (int i = 0; i < startDayOfWeek; i++) {
System.out.print(" "); // 打印起始日期之前的空格
}
for (int i = 1; i <= days; i++) {
System.out.printf("%7d", i); // 打印日期
if ((startDayOfWeek + i) % 7 == 0) {
System.out.println(); // 每打印7个日期换行
}
}
```
以上是根据用户输入的年份和月份打印日历图的实现方法,可以将以上代码整合到一个方法中,并对异常情况进行处理。
### 回答3:
可以通过以下步骤来实现根据用户输入的年份与月份打印日历图。
1. 首先,需要获取用户输入的年份和月份。可以使用Scanner类来实现。
2. 接下来,需要计算输入月份的第一天是星期几。根据题目给出的条件,已知1900年1月1日是星期一。可以通过计算经过的天数来求得所需日期的星期几。
3. 然后,需要确定输入月份的天数。可以使用Calendar类的getActualMaximum方法来获取。
4. 最后,要按照日历的形式打印输出。可以使用循环来实现。先打印星期几的标题行,再打印每一天的日期。可以使用格式化输出来对齐输出的内容。
下面是一种可能的实现方式,具体代码如下:
```java
import java.util.Scanner;
import java.util.Calendar;
public class CalendarPrinter {
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();
// 计算第一天是星期几
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);
int firstDayOfWeek = (calendar.get(Calendar.DAY_OF_WEEK) - 1 + 7) % 7;
// 确定月份的天数
int daysOfMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
// 打印输出
System.out.println("===============================");
System.out.printf(" %d年%d月%n", year, month);
System.out.println("===============================");
System.out.println("日 一 二 三 四 五 六");
// 打印空格
for (int i = 0; i < firstDayOfWeek; i++) {
System.out.print(" ");
}
// 打印日期
for (int i = 1; i <= daysOfMonth; i++) {
System.out.printf("%2d ", i);
if ((firstDayOfWeek + i) % 7 == 0) {
System.out.println();
}
}
System.out.println();
System.out.println("===============================");
scanner.close();
}
}
```
这样,用户输入的年份和月份即可打印出对应的日历图。在打印日期时,如果一个月的第一天不是星期一,那么需要在前面打印相应的空格。每打印7个日期后换行。输出的格式与日历类似。