2014-10-27 24 views
-1

所以我想一次的codeeval的方便问题,为multiplication tables如何以右对齐方式打印数字?

其中一个要求是

(这些数字是右对齐并去掉领先/每行尾部的空格 )

我不知道该怎么做,我当前的代码看起来像

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 

如何右对齐的数字?

+3

你可以看看printf和使用百分比修饰符垫你的代码。 printf(“%10d”,yourNumber); – LeatherFace 2014-10-27 18:58:09

回答

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描述宽度作为

宽度

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

而且

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

0

要打印数量为右对齐你可以使用 System.out.printf( “%ND”,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(""); 
    }