Java实现闰年判断与指定日期对应星期的控制台输出
核心问题排查
- 日历实例未绑定用户输入的日期:代码在初始化
Calendar对象时自动获取了系统当前时间,后续操作全程没有将用户输入的年、月、日参数写入该对象,最终读取到的星期值始终为代码运行当日的星期,和用户输入的日期无关联 - 缺少月份格式适配:用户输入的是字符串形式的月份名称(如"May"),但
Calendar类要求传入的月份参数是从0开始计数的整数(1月对应0、5月对应4),没有建立字符串到整数的映射逻辑,无法完成日期写入操作 - 输出格式与目标要求不匹配:代码中存在多余的标题打印语句,且提示语的大小写、字符串拼接规则和目标输出格式存在差异
修复实现逻辑
- 移除多余的标题打印语句,将输入提示语的格式调整为和目标要求一致的小写开头格式
- 预定义标准月份名称数组,数组索引与
Calendar类要求的整数月份值一一对应,用于将用户输入的字符串月份转换为可被日历对象识别的整数索引 - 待所有用户输入采集完成后,调用
calendar.set(year, monthIndex, day)方法,将用户输入的完整日期信息写入日历实例,替换默认绑定的系统当前时间 - 从写入完成的日历实例中读取
Calendar.DAY_OF_WEEK字段值,匹配预定义的星期字符串数组,按要求格式拼接输出 - 保留原有已经验证正确的闰年判断逻辑,不做冗余修改
可运行参考代码
import java.util.Scanner; import java.util.Calendar; public class nandyan3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 预定义标准月份映射:数组索引与Calendar的月份值一一对应(0=1月,11=12月) String[] monthNames = { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; String[] weekDays = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; int day, year, monthIndex = -1; String inputMonth; boolean isLeapYear = false; Calendar calendar = Calendar.getInstance(); // 采集用户输入 System.out.print("Enter month: "); inputMonth = scanner.next(); // 匹配输入的月份对应的整数索引 for (int i = 0; i < monthNames.length; i++) { if (monthNames[i].equalsIgnoreCase(inputMonth)) { monthIndex = i; break; } } System.out.print("Enter day: "); day = scanner.nextInt(); System.out.print("Enter year: "); year = scanner.nextInt(); // 闰年判断逻辑 if (year % 4 == 0) { if (year % 100 == 0) { isLeapYear = (year % 400 == 0); } else { isLeapYear = true; } } else { isLeapYear = false; } // 输出闰年判断结果 if (isLeapYear) { System.out.println(year + " is a leap year"); } else { System.out.println(year + " is not a leap year"); } // 将用户输入的日期写入日历对象,读取对应星期值 calendar.set(year, monthIndex, day); int weekIndex = calendar.get(Calendar.DAY_OF_WEEK) - 1; System.out.println(inputMonth + " " + day + ", " + year + " is " + weekDays[weekIndex]); scanner.close(); } }
运行效果验证
输入示例参数后的输出与要求完全匹配:
Enter month: May Enter day: 2 Enter year: 2021 2021 is not a leap year May 2, 2021 is Sunday
内容的提问来源于stack exchange,提问作者Cole Cole
相关产品推荐
相关产品推荐

