如何实现正确的Java方法int getCentury()以计算并输出日期对应世纪?
修正Java的
getCentury()方法以正确计算世纪 你提供的代码确实有几个关键逻辑漏洞,导致没法正确输出对应日期的世纪。咱们一步步拆解问题,然后给出修正后的完整实现:
现有代码的问题点
- 上来就硬编码
century = 21,完全没考虑输入年份的实际值,这肯定不对 - 计算完年份对应的世纪值后,压根没把结果赋值给
century,直接返回了初始的21,这是核心逻辑错误 - 方法没有接收年、月、日的参数,根本拿不到用户输入的日期信息
- 没有按照题目要求的格式输出日期和对应的世纪
修正后的完整代码
import java.util.Scanner; public class CenturyCalculator { // 方法接收年、月、日参数,返回对应的世纪 public static int getCentury(int year, int month, int day) { int century; // 世纪计算规则:整百年份直接取百位以上的数,非整百年份加1 if (year % 100 == 0) { century = year / 100; } else { century = (year / 100) + 1; } // 按题目要求的格式输出,%02d保证月份和日期是两位数字 System.out.printf("%d %02d %02d – %d世纪%n", year, month, day, century); return century; } // 测试用的主方法,模拟用户输入 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入年 月 日(用空格分隔):"); int year = scanner.nextInt(); int month = scanner.nextInt(); int day = scanner.nextInt(); getCentury(year, month, day); scanner.close(); } }
关键修改说明
- 添加方法参数:给
getCentury加上year、month、day三个参数,这样才能获取用户输入的日期 - 修复世纪计算逻辑:删掉硬编码的
century = 21,根据年份的实际值计算世纪,把结果直接赋值给century - 格式化输出:用
printf实现题目要求的输出格式,%02d可以让单个数字的月份/日期自动补零(比如3月变成03) - 添加测试入口:在
main里用Scanner获取用户输入,调用方法验证功能,方便你测试
测试效果
当你输入1878 03 03时,程序会输出:
1878 03 03 – 19世纪
另外补充下:如果是整百年份,比如输入1900 12 31,会输出1900 12 31 – 19世纪;输入1901 01 01则输出1901 01 01 – 20世纪,这符合通用的世纪划分规则。
内容的提问来源于stack exchange,提问作者user12297295
相关产品推荐
相关产品推荐

