使用printf在Java中的简单格式化问题

使用printf在Java中的简单格式化问题,java,format,printf,Java,Format,Printf,我有一个由12个数字组成的数组 int ary2[] = {3,5,9,11,15,18,22,23,30,31,35,39}; 我想把数字打印出来,数字有两个位置,数字之间有一个空格 打印输出示例如下: 3 5 9 11 15 18 22 23 30 31 35 39 这就是我走了多远 for(int i = 0; i < ary2.length; i++) { System.out.printf("%-3s", ary2[i]); } 这方面我是新手。 虽然我不会直

我有一个由12个数字组成的数组

int ary2[] = {3,5,9,11,15,18,22,23,30,31,35,39};
我想把数字打印出来,数字有两个位置,数字之间有一个空格

打印输出示例如下:

 3  5  9 11 15 18 22 23 30 31 35 39
这就是我走了多远

for(int i = 0; i < ary2.length; i++)
{
    System.out.printf("%-3s", ary2[i]);
}
这方面我是新手。 虽然我不会直接将此作为家庭作业提交,但它与我的家庭作业项目有关;因此,无论如何,我都会使用家庭作业标签


编辑:找到答案。

我不太确定我是否理解这个问题。您的代码示例看起来已经这样做了。还是要将它们视为数字对齐?如果是,则需要%d而不是%s字符串。查看以下各项是否适合您的需要:

System.out.printf("%2d ", ary2[i]);
这将打印:

 3  5  9 11 15 18 22 23 30 31 35 39 
与原始代码所做的不同:

3  5  9  11 15 18 22 23 30 31 35 39 
您只需使用尾随空格


您可以在中找到更多的格式规则。

我不太确定我是否理解这个问题。您的代码示例看起来已经这样做了。还是要将它们视为数字对齐?如果是,则需要%d而不是%s字符串。查看以下各项是否适合您的需要:

System.out.printf("%2d ", ary2[i]);
这将打印:

 3  5  9 11 15 18 22 23 30 31 35 39 
与原始代码所做的不同:

3  5  9  11 15 18 22 23 30 31 35 39 
您只需使用尾随空格


您可以在中找到更多格式规则。

不确定问题出在哪里,阅读其他答案和注释,我怀疑您想显示0填充的数字:

    System.out.printf(" %02d", ary2[i]);
不是0填充的,2个位置,就像其他人已经写的:

    System.out.printf(" %2d", ...
我把空格放在开头。。。但这只是我的喜好

您可以使用其他字符作为分隔符而不是空格来查看发生了什么。 类似于System.out.printf^%2d,ary2[i]

如果要避免行首或行尾的空格,必须拆分输出

    System.out.printf("%2d", ary2[0]);  // no space here
    for(int i = 1; i < ary2.length; i++)
    {
        System.out.printf(" %2d", ary2[i]);
    }
或者做一些我不喜欢的事情

    for(int i = 0; i < ary2.length; i++)
    {
        System.out.printf("%s%2d", (i == 0 ? "" : " "), ary2[i]);
    }

不确定问题是什么,阅读其他答案和评论,我怀疑您希望显示数字0-padded:

    System.out.printf(" %02d", ary2[i]);
不是0填充的,2个位置,就像其他人已经写的:

    System.out.printf(" %2d", ...
我把空格放在开头。。。但这只是我的喜好

您可以使用其他字符作为分隔符而不是空格来查看发生了什么。 类似于System.out.printf^%2d,ary2[i]

如果要避免行首或行尾的空格,必须拆分输出

    System.out.printf("%2d", ary2[0]);  // no space here
    for(int i = 1; i < ary2.length; i++)
    {
        System.out.printf(" %2d", ary2[i]);
    }
或者做一些我不喜欢的事情

    for(int i = 0; i < ary2.length; i++)
    {
        System.out.printf("%s%2d", (i == 0 ? "" : " "), ary2[i]);
    }

我认为,如果您没有正确使用代码标记就发布问题,那么所需输出的格式就会丢失。你能用实际需要的输出再次编辑这个问题吗?你能用你现有的代码解释这个问题吗?我唯一能看到的是它使用左对齐。我更喜欢右对齐。但左派阵营似乎是有意的。另一件事是,它在行末端留下了不必要的尾随空间。除此之外,它似乎像预期的那样工作。我希望每个数字之间都有一个空格。数组中的每个整数至少指定2个点。这真是令人困惑。我已经回答了。菲尔,正如巴卢斯克所要求的:请编辑你的帖子,并清楚地指出输出应该是什么样子。现在的情况是:3 5 9 11 15 18 22 23 30 31 35 39,显然不符合您试图告诉我们的内容。我认为,如果您在未正确使用代码标记的情况下发布问题,所需输出的格式将丢失。你能用实际需要的输出再次编辑这个问题吗?你能用你现有的代码解释这个问题吗?我唯一能看到的是它使用左对齐。我更喜欢右对齐。但左派阵营似乎是有意的。另一件事是,它在行末端留下了不必要的尾随空间。除此之外,它似乎像预期的那样工作。我希望每个数字之间都有一个空格。数组中的每个整数至少指定2个点。这真是令人困惑。我已经回答了。菲尔,正如巴卢斯克所要求的:请编辑你的帖子,并清楚地指出输出应该是什么样子。现在的情况是:3 5 9 11 15 18 22 23 30 31 35 39,显然不符合你想告诉我们的。但正如你所看到的,前两个字母3和5之间有两个空格。你真的说了,你想要两个数字?那你是什么意思?但正如你所看到的,在前两个字母3和5之间有两个空格。你字面上说,你想要两个数字的位置?那你是什么意思?