
如图所示,计算2026年每个月1-28号,要求列出每个月是周末的日期有哪些,从而输出哪些日期是周末次数最多;最后输入其中的一个日期,找出对应是周末的日期有哪些(用几月几日输出)。

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
public class one1 {
public static void main(String[] args) {
// 计算 2026 年的日期范围
LocalDate startDate = LocalDate.of(2026, 1, 1);
LocalDate endDate = LocalDate.of(2026, 12, 31);
// 用 Map 记录每个日期是周末的次数
Map<LocalDate, Integer> weekendCountMap = new HashMap<>();
while (!startDate.isAfter(endDate)) {
if (startDate.getDayOfMonth() >= 1 && startDate.getDayOfMonth() <= 28) { // 日期符合要求
if (startDate.getDayOfWeek() == DayOfWeek.SATURDAY || startDate.getDayOfWeek() == DayOfWeek.SUNDAY) {
// 如果是周末,则将其次数加 1
weekendCountMap.put(startDate, weekendCountMap.getOrDefault(startDate, 0) + 1);
}
}
// 每次循环日期加上一天
startDate = startDate.plusDays(1);
}
int maxWeekendCount = 0; // 记录周末数量最多的次数
LocalDate maxWeekendDate = null; // 记录周末数量最多的日期
Map<Integer, Integer> dayWeekendCountMap = new HashMap<>(); // 记录每天是周末的次数
// 遍历所有记录的日期
for (Map.Entry<LocalDate, Integer> entry : weekendCountMap.entrySet()) {
LocalDate date = entry.getKey();
int weekendCount = entry.getValue();
// 统计每天是周末的次数
int dayOfWeekendCount = dayWeekendCountMap.getOrDefault(date.getDayOfMonth(), 0);
dayWeekendCountMap.put(date.getDayOfMonth(), dayOfWeekendCount + weekendCount);
// 统计周末数量最多的日期
if (weekendCount > maxWeekendCount) {
maxWeekendCount = weekendCount;
maxWeekendDate = date;
}
}
// 输出是周末的日期
System.out.println("2026年中是周末的日期有:");
for (Map.Entry<LocalDate, Integer> entry : weekendCountMap.entrySet()) {
LocalDate date = entry.getKey();
int weekendCount = entry.getValue();
if (date.getDayOfMonth() >= 1 && date.getDayOfMonth() <= 28) { // 只输出符合要求的日期
System.out.println(date.getMonthValue() + "月" + date.getDayOfMonth() + "日 是周末 ");
}
}
// 输出每号的周末数
System.out.println("每号的周末数是:");
for (Map.Entry<Integer, Integer> entry : dayWeekendCountMap.entrySet()) {
int dayOfMonth = entry.getKey();
int weekendCount = entry.getValue();
System.out.println(dayOfMonth + "日 周末数:" + weekendCount);
}
// 统计不区分月的周末数量最多的日期
int maxDayWeekendCount = 0;
int maxDayOfWeekend = 0;
for (Map.Entry<Integer, Integer> entry : dayWeekendCountMap.entrySet()) {
int dayOfWeekendCount = entry.getValue();
if (dayOfWeekendCount > maxDayWeekendCount) {
maxDayWeekendCount = dayOfWeekendCount;
maxDayOfWeekend = entry.getKey();
}
}
// 输出日期中周末数量最多的日期
System.out.println("日期中周末数量最多的是:" + maxDayOfWeekend + "日,数量为:" + maxDayWeekendCount);
// 这里重复上面的一部分代码,为了找出maxDayOfWeekend对应的月份,减少上面的复杂储存
System.out.println("对应的月份是:");
for (Map.Entry<LocalDate, Integer> entry : weekendCountMap.entrySet()) {
LocalDate date = entry.getKey();
int weekendCount = entry.getValue();
if (date.getDayOfMonth() >= 1 && date.getDayOfMonth() <= 28) { // 只输出符合要求的日期
if(date.getDayOfMonth()==maxDayOfWeekend) {
System.out.print(date.getMonthValue() + "月");
}
}
}
}
}