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

Java新手求助:如何用String.format()实现每行输出3个闰年

搞定闰年每行输出3个的问题

嘿,我来帮你解决这个闰年输出的小需求!先理清楚你的目标:遍历1999到2045的年份,挑出闰年,每行输出3个,年份之间用逗号分隔,预期输出大概是这样:

2000,2004,2008
2012,2016,2020
2024,2028,2032
2036,2040,2044

你的现有代码已经把闰年判断的核心逻辑写对了,就是没处理“计数换行”和“格式拼接”的部分,我来给你补全。

完整可运行代码

public class LeapYearPrinter {
    public static void main(String[] args) {
        int start = 1999;
        int end = 2045;
        int leapCount = 0; // 用来记当前已经输出了几个闰年

        for (int year = start; year <= end; year++) {
            // 标准闰年判断:能被4整除但不被100整除,或者直接被400整除
            boolean isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
            
            if (isLeap) {
                leapCount++;
                // 根据计数决定输出格式
                if (leapCount % 3 == 0) {
                    // 第3个闰年,输出后换行
                    System.out.println(year);
                } else {
                    // 不是第3个,输出年份加逗号分隔,不换行
                    System.out.print(year + ", ");
                }
            }
        }
    }
}

关键细节说明

  1. 计数变量leapCount:每找到一个闰年就加1,用它来判断是不是该换行了。
  2. 输出控制:用println和print区分换行和不换行的场景,确保每行刚好3个闰年。
  3. 范围修正:你原来写的year<2045会漏掉2045年(虽然它不是闰年),改成year <= end更严谨,保证覆盖你指定的整个范围。

如果要和你给的示例格式完全一致(组间空格)

如果你想要的是每3个闰年为一组,组内逗号分隔,组之间用空格隔开,整行输出(比如2000,2004,2008 2012,2016,2020 ...),可以用StringBuilder来拼接,效率更高:

public class LeapYearPrinter {
    public static void main(String[] args) {
        int start = 1999;
        int end = 2045;
        int leapCount = 0;
        StringBuilder result = new StringBuilder();

        for (int year = start; year <= end; year++) {
            boolean isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
            
            if (isLeap) {
                leapCount++;
                result.append(year);
                // 组内未到3个,加逗号;组结束加空格(最后一组不加)
                if (leapCount % 3 != 0) {
                    result.append(",");
                } else if (year != 2044) { // 2044是这个范围里最后一个闰年,也可以动态判断
                    result.append(" ");
                }
            }
        }
        System.out.println(result.toString());
    }
}

这个版本用字符串拼接的方式,最后一次性输出,比多次print更高效,格式也更容易调整。

灵活扩展方案

如果你的年份范围是动态的,不想硬编码最后一个闰年,可以先收集所有闰年到列表里,再遍历处理格式,这样更易读也更灵活:

import java.util.ArrayList;
import java.util.List;

public class LeapYearPrinter {
    public static void main(String[] args) {
        int start = 1999;
        int end = 2045;
        List<Integer> leapYears = new ArrayList<>();

        // 第一步:收集所有闰年
        for (int year = start; year <= end; year++) {
            boolean isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
            if (isLeap) {
                leapYears.add(year);
            }
        }

        // 第二步:按格式输出
        for (int i = 0; i < leapYears.size(); i++) {
            System.out.print(leapYears.get(i));
            // 判断是否需要加逗号或换行
            if ((i + 1) % 3 == 0) {
                System.out.println();
            } else if (i != leapYears.size() - 1) {
                System.out.print(", ");
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者clink

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:23:41