2

So I am trying once of the codeeval's easy problems for multiplication tables

One of the requirement is

(The numbers are right-aligned and strip out leading/trailing spaces on each line)

I am not sure about how to do that, my current code looks like

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));
        }
    }

and what I get back is

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

How do I right-align numbers?

Sam
  • 20,096
  • 2
  • 45
  • 71
daydreamer
  • 87,243
  • 191
  • 450
  • 722

2 Answers2

1

As you said in your question title, you use printf(). Something like,

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();
}

Where 6 is the width and the Javadoc for Formatter describes width as

Width

The width is the minimum number of characters to be written to the output. For the line separator conversion, width is not applicable; if it is provided, an exception will be thrown.

And

'd' ... Formats the argument as a decimal integer.

Elliott Frisch
  • 198,278
  • 20
  • 158
  • 249
0

To print a number as right aligned you could use System.out.printf("%nd", x); where n is minimum width and x is the integer to be print.

Now for your questions answer you could use below code

 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("");
    }