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 + ", "); } } } } }
关键细节说明
- 计数变量
leapCount:每找到一个闰年就加1,用它来判断是不是该换行了。 - 输出控制:用
println和print区分换行和不换行的场景,确保每行刚好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
相关产品推荐
相关产品推荐

