Java控制台打印简易日历需先计算当月1号星期几(如以2000-1-1为周六,累加天数模7),再用嵌套循环按“日-六”七列排布:首行输出表头,前firstDayOfWeek列补空格,之后填日期,每行7列换行,日期用"%3d"对齐,闰年按规则判断。

用 Java 在控制台打印简易日历,核心是用循环控制行与列,用条件判断空格、换行和日期对齐。关键在于算出当月1号是星期几,再按“日-六”七列排布,前面补空格,每行7个日期后换行。
计算每月1号是星期几(基点法)
最简单的方式是固定一个已知星期的日期(比如 1900-1-1 是星期一),通过总天数模7推算。但更实用的是用 蔡勒公式(Zeller's Congruence) 或直接借助 Calendar 类(学习阶段可接受)。若纯手写,推荐用已知锚点+累加天数:
- 设起始日:2000年1月1日是星期六(即 weekday=6,设周日=0,周一=1…周六=6)
- 遍历从2000年到目标年份,每年加365(闰年+1),再加目标月前各月天数
- 最终
(baseWeekday + totalDays) % 7就是目标月1号的星期几
用嵌套循环打印日历主体
外层循环控制“行”(最多6行),内层循环控制“列”(每天一列,共7列)。用一个计数器 day 从1开始递增,只在日期有效时打印:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
- 先打印头部:"日 一 二 三 四 五 六"(注意中文字符等宽,用空格对齐)
- 第一行:前
firstDayOfWeek列打印空格(如1号是周二 → firstDayOfWeek=2,则前2列输出" ") - 从第
firstDayOfWeek列开始填日期,day每次+1,直到等于当月总天数(可用数组存各月天数,2月按闰年判断) - 每打完7个位置(无论数字或空格)就换行;即使最后一天已打完,剩余列仍需留空(保持表格整齐)
对齐与格式细节(避免错位)
控制台中中文字符占2英文字符宽,但空格是单宽,所以不能简单用一个空格分隔。推荐统一用英文数字+固定宽度:
立即学习“Java免费学习笔记(深入)”;
- 每个日期占3字符宽(如" 1 "、"12 "、"31 "),用
String.format("%3d", day) - 头部也用同样宽度:"日 "、"一 "…"六 "(注意末尾空格)
- 不要用
\t,制表符宽度不固定,容易错行 - 闰年判断:
year % 4 == 0 && year % 100 != 0 || year % 400 == 0
一个可运行的简化示例逻辑
假设要打印 2024年4月(1号是星期日,共30天):
- 首行:先打"日 ",然后" 1 "到" 7 "(共7个)→ 换行
- 第二行:" 8 "到"14 "→ 换行
- ……直到"29 ""30 ",后面两格为空(因30÷7余2,最后一行只填了2个数)
- 总行数 =
(firstDayOfWeek + daysInMonth + 6) / 7(向上取整)

















