Простой вопрос форматирования в Java с использованием printf - PullRequest
1 голос
/ 03 декабря 2009

У меня есть массив из 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]);
}

Я новичок в этом. Хотя я не буду напрямую представлять это как домашнее задание, оно связано с моим домашним проектом; поэтому я все равно буду использовать этот тег домашней работы.

РЕДАКТИРОВАТЬ: Ответ найден.

Ответы [ 2 ]

4 голосов
/ 03 декабря 2009

Я не совсем уверен, понимаю ли я вопрос. Ваш пример кода, похоже, уже сделал это. Или вы хотите рассматривать их как цифры (выравнивание вправо)? Если так, то вам нужно вместо %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 

Вы должны жить только с пробелом;)

Дополнительные правила форматирования можно найти в java.util.Formatter API .

0 голосов
/ 03 декабря 2009

Не уверен, в чем проблема, читая другие ответы и комментарии, я подозреваю, что вы хотите отобразить цифры 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]);
    }
...