Вывод Printf для arrayList в таблицу с правильным отступом - PullRequest
0 голосов
/ 24 ноября 2018

Я в основном выполнил свое задание, но в выводе требуется небольшое форматирование, и я просто не понимаю, как использовать printf для решения проблемы.Мне никогда не приходилось использовать его раньше.

У меня есть идентификаторы ввода пользователя и pws, которые сохраняются в списке массивов.

Вывод должен выглядеть следующим образом:

    Nr. Name                               Password (ROT13)
-----------------------------------------------------------
 1. Sally Hu                               nopNOP
 2. Bernd das Brot                         zrvaCnffjbeg
 3. John Doe                               klmTRURVZ
-----------------------------------------------------------

, но для меня выглядит так:

 Nr. Name                                 Password (ROT13)
-----------------------------------------------------------
 1. Sally Hu                               nopNOP
 2. Bernd das Brot                             zrvaCnffjbeg
 3. John Doe                               klmTRURVZ
-----------------------------------------------------------

Текущий код для печати:

  System.out.println("Nr. Name                       Passwort (ROT13)");


    System.out.println("-----------------------------------------------------------");
                    for(int i = 0; i < userList.size();i++)
                    {
                        System.out.println((userList.indexOf(userList.get(i))+1) +". " + userList.get(i).getmId() + "       " + rot13(userList.get(i).getmPw()));    
                    }

Если кто-то может помочь мне очень быстро и, возможно, даже объяснить некоторые из используемых printf функций, используемых для решения этой проблемы форматирования? (Таким образом, в будущем я могу правильно отформатировать с помощью printf, вместо этого хакерского псевдо-форматирования с использованием + "" + в моих линиях печати, что приводит к таким проблемам, как здесь)

Ответы [ 3 ]

0 голосов
/ 24 ноября 2018

попробуйте

 System.out.format("%d. %-15s %s%n", userList.indexOf(userList.get(i))+1, userList.get(i).getmId(), rot13(userList.get(i).getmPw()));    
0 голосов
/ 24 ноября 2018

Я просто не понимаю, как я могу использовать printf

Вот подпись метода, из документов .

public PrintStream printf(String format, Object... args)

Давайте оставим в стороне возвращаемое значение и сосредоточимся на аргументах :

format - это строка, которая определяет форматирование, которое будет использоваться, и args список переменных, которые будут напечатаны с использованием этого форматирования.

Давайте рассмотрим пример.

Предположим, вы хотите напечатать строку в этом конкретном формате -> "5 + 6= 11 ".Но это конкретный экземпляр этой отформатированной строки, с этими конкретными числами, вместо этого вы хотите поставить произвольные числа, и результатом будет строка, которая показывает добавление этих чисел.

Формат строки такой:число, пробел '', знак плюс '+', число, пробел, знак равенства '=', пробел и, наконец, еще одно число.Чтобы printf() понял это, вам нужно указать его в виде строки в первом аргументе.

Это строка : String format = "%d + %d = %d"

printf() будет знать формат, который вы хотите из этой строки выше, и будет заменять каждый '% d' (%f для чисел с плавающей запятой,% s для строк и т. д.) с целочисленной переменной.Это целые числа, которые вы дополняете printf () после.

Наконец, снова на нашем конкретном примере, "5 + 6 = 11" .

int number1 = 5, number2 = 6;
String format = "%d + %d = %d";
//print the result formatted
System.out.printf(format,number1, number2, number1+number2);

Вы можете изменить значения number1 и number2, результатом всегда будет их добавление в формате, указанном String format.

0 голосов
/ 24 ноября 2018

Вы можете идентифицировать с "\ t" в System.out.println:

System.out.println("test\ttest2");
...