如何以正确的方式打印数字?

时间:2014-10-27 18:56:46

标签: java printf

所以我尝试了一下multiplication tables

的codeeval简单问题

其中一项要求是

  

(数字是右对齐的并且去掉前导/尾随空格   在每一行)

我不知道如何做到这一点,我目前的代码看起来像

private static void printTable(final int numberOfTables, final int numberOfTimes) {
        for (int i = 1; i <= NUMBER_OF_TABLES; i++) {
            final StringBuilder sb = new StringBuilder();
            for (int j = 1; j <= NUMBER_OF_TIMES; j++) {
                sb.append(i * j).append("    ");
            }
            System.out.println(sb.substring(0, sb.length() - 4));
        }
    }

我得到的是

1    2    3    4    5    6    7    8    9    10    11    12
2    4    6    8    10    12    14    16    18    20    22    24
3    6    9    12    15    18    21    24    27    30    33    36
4    8    12    16    20    24    28    32    36    40    44    48
5    10    15    20    25    30    35    40    45    50    55    60
6    12    18    24    30    36    42    48    54    60    66    72
7    14    21    28    35    42    49    56    63    70    77    84
8    16    24    32    40    48    56    64    72    80    88    96
9    18    27    36    45    54    63    72    81    90    99    108
10    20    30    40    50    60    70    80    90    100    110    120
11    22    33    44    55    66    77    88    99    110    121    132
12    24    36    48    60    72    84    96    108    120    132    144

如何正确对齐数字?

2 个答案:

答案 0 :(得分:0)

正如您在问题标题中所说,您使用printf()。像,

for (int i = 1; i <= NUMBER_OF_TABLES; i++) {
    for (int j = 1; j <= NUMBER_OF_TIMES; j++) {
        System.out.printf("%6d", i * j);
    }
    System.out.println();
}

其中6是宽度,而Formatter的Javadoc将 width 描述为

  

<强>宽度

     

宽度是要写入输出的最小字符数。对于行分隔符转换,宽度不适用;如果提供,将抛出异常。

  

'd' ...将参数格式化为十进制整数。

答案 1 :(得分:0)

要打印正确对齐的数字,您可以使用     System.out.printf(&#34;%nd&#34;,x); 其中n是最小宽度,x是要打印的整数。

现在您的问题答案可以使用以下代码

 for(int i=1; i<= NUMBER_OF_TABLES; i++)
    {
        int j=1;
        System.out.print(i*j++);
        for(; j<= NUMBER_OF_TIMES; j++)
        {
            System.out.printf("%4d",j*i);
        }
        System.out.println("");
    }