You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现正确的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:24:39