java实现1.编写一个程序,程序提供两种功能:1)根据用户输入的年份输出该年日历。2) 根据用户输入的日期,输出该天星期。 程序应具有良好的人机交互性能,即:程序应向用户提示功能说明,并可根据用户的功能选择,执行对应的功能,并给出带详细描述信息的最终执行结果。
时间: 2023-05-22 10:01:02 浏览: 43
ChatGPT: 您好!这是一个很有趣的问题。以下是我提供的 Java 代码,可以实现您所需的两种功能:
```
import java.util.Scanner;
public class CalendarProgram {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎使用日历程序!");
System.out.println("请选择您需要的功能:");
System.out.println("1. 根据年份输出日历");
System.out.println("2. 根据日期输出星期");
int choice = scanner.nextInt();
if (choice == 1) {
System.out.println("请输入年份:");
int year = scanner.nextInt();
printCalendar(year);
} else if (choice == 2) {
System.out.println("请输入日期(格式为yyyy-MM-dd):");
String date = scanner.next();
printWeekday(date);
} else {
System.out.println("输入错误,请重新运行程序!");
}
}
public static void printCalendar(int year) {
System.out.println(year + "年的日历如下:");
for (int month = 1; month <= 12; month++) {
System.out.println("--------" + year + "年" + month + "月" + "--------");
System.out.println("日\t一\t二\t三\t四\t五\t六");
int days = getDaysOfMonth(year, month);
int firstDayOfWeek = getFirstDayOfWeek(year, month);
for (int i = 1; i <= days; i++) {
if (i == 1) {
for (int j = 0; j < firstDayOfWeek; j++) {
System.out.print("\t");
}
}
System.out.print(i + "\t");
if ((i + firstDayOfWeek) % 7 == 0) {
System.out.println();
}
}
System.out.println();
}
}
public static void printWeekday(String date) {
String[] dateArray = date.split("-");
int year = Integer.parseInt(dateArray[0]);
int month = Integer.parseInt(dateArray[1]);
int day = Integer.parseInt(dateArray[2]);
int weekday = getWeekday(year, month, day);
String[] weekdays = {"周日", "周一", "周二", "周三", "周四", "周五", "周六"};
System.out.println(date + "是" + weekdays[weekday] + "。");
}
public static int getDaysOfMonth(int year, int month) {
int[] daysOfMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (month == 2 && isLeapYear(year)) {
return 29;
} else {
return daysOfMonth[month - 1];
}
}
public static int getFirstDayOfWeek(int year, int month) {
int day = 1;
for (int i = 1900; i < year; i++) {
if (isLeapYear(i)) {
day += 366;
} else {
day += 365;
}
}
for (int i = 1; i < month; i++) {
day += getDaysOfMonth(year, i);
}
return (day - 1) % 7;
}
public static int getWeekday(int year, int month, int day) {
int firstDayOfWeek = getFirstDayOfWeek(year, month);
int days = 0;
for (int i = 1; i < day; i++) {
days++;
if ((firstDayOfWeek + days) % 7 == 0) {
days = 0;
}
}
return (firstDayOfWeek + days) % 7;
}
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
}
```
这个程序可以根据用户输入的年份输出该年的日历,或者根据用户输入的日期输出该天是星期几。程序会提示用户选择功能,并根据用户的选择执行对应的功能。如果您有任何问题,请随时问我!