使用Java string.format()进行打印

使用Java string.format()进行打印,java,string,format,Java,String,Format,我是java新手,我编写了一段代码来打印特定范围内的闰年,对于输出,我希望每行打印3个闰年,每年用逗号分隔 例如,从1999年到2045年,我想要的产出是: 2000,2004,2008 2012,2016,2020 2024,2028,2032 2036,2040,2044 我已经编写了代码: for (int year = 1999; year<2045; year ++) { if (((year%4 == 0) && (year%100 !

我是java新手,我编写了一段代码来打印特定范围内的闰年,对于输出,我希望每行打印3个闰年,每年用逗号分隔

例如,从1999年到2045年,我想要的产出是:

2000,2004,2008
2012,2016,2020
2024,2028,2032
2036,2040,2044
我已经编写了代码:

for (int year = 1999; year<2045; year ++) {
            if (((year%4 == 0) && (year%100 !=0)) || (year%400==0)) {
                System.out.println(String.format(format, year));   #issue here
            }
}

对于(int year=1999;year您可以使用%tY作为year的格式。它将以四位数字格式化year

String.format("%tY", year)
以下是我尝试过的代码:

import java.util.Calendar;

public class MyClass {
    public static void main(String args[]) {
        int year;
          Calendar cal = Calendar.getInstance();
        for (year = 1999; year<2045; year ++) {
            if (((year%4 == 0) && (year%100 !=0)) || (year%400==0)) {
                cal.set(year, 0, 0);
                System.out.println(String.format("%1$tY", cal));   
            }
        }
    }
}
import java.util.Calendar;
公共类MyClass{
公共静态void main(字符串参数[]){
国际年;
Calendar cal=Calendar.getInstance();

对于(年份=1999;年份而言,如果没有一些条件声明,这是无法实现的,最好这样做:

for (int year = 1999; year < 2045; year++) {
    if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {         
        System.out.print(year);
        column++;
        if (column % 3 == 0) {
            System.out.println();
        } else {
            System.out.print(",");
        }
    }
}
for(整数年=1999年;年份<2045年;年份++){
如果((第%4年==0)和&(第%100年!=0))| |(第%400年==0)){
系统输出打印(年);
列++;
如果(列%3==0){
System.out.println();
}否则{
系统输出打印(“,”);
}
}
}
String.format()大致接受第一个字符串参数,即您想要的“布局”,其中以%开头的说明符表示变量类型(%s表示字符串,%d表示数字等),下一系列参数是实际数据-应在数量和顺序上与格式布局中的说明符数量匹配:

    int[] years = new int[3];
    int i = 0;
    for (int year = 1999; year < 2045; year++) {
        if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) {
            years[i++] = year;
            if (i > 2) {
                System.out.println(String.format("%d,%d,%d", years[0], years[1], years[2]));
                i = 0;
            }
        }
    }

2000,2004,2008
2012,2016,2020
2024,2028,2032
2036,2040,2044
除了在本例中使用的int数组周围还有方括号之外

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

在当前的设计中,一次只能打印一年,因此,在添加大量难看的代码(例如计数器以达到迭代的3/结尾)之前,3年逗号分隔的打印格式将不起作用。另一方面,如果可以,在
System.out.print中包装
String.format
是毫无意义的
System.out.printf
。这可能会帮助您了解
格式的工作原理-我不认为String.format()是这样做的一个很好的候选者。要么你在错误的地方使用它,要么你不理解你的家庭作业问题:p这只能在单线程模式下工作。否则其他线程可能会干扰你的打印。所以,不要使用它。@Imaskar考虑到OP是Java的新手,他可能不是从其他线程打印的。而我们的评论在技术上是正确的,这不是一个非常现实的可能性。@Kayaman这是坚持不良做法的借口吗?他会记住它并在以后犯错误。只需将System.out与StringBuilder交换,并在最后打印出来,就可以了。@Imaskar别夸张了。在他开始写之前,他会做很多更糟糕的事情正在加载多线程代码。@Imaskar遗憾的是,
StringBuilder
也不是线程安全的……这看起来不像op所要求的。他想要连续3个。
[2000, 2004, 2008]
[2012, 2016, 2020]
[2024, 2028, 2032]
[2036, 2040, 2044]