2017-01-08 7 views
0

Я начинаю программировать, и в настоящее время я изучаю, как создавать гибкую таблицу на Java. Я наткнулся на то, что, по-моему, мне нужна помощь, чтобы понять. Позвольте мне использовать простой пример, чтобы проиллюстрировать это.Как сделать отзывчивую таблицу в Java?

У меня есть 2 массивы,

String[] name = new String[] {"James","Tom","Rodriguez"}; 
Integer[] score = new Double[] {15,20,13}; 

, и я хочу, чтобы превратить их в нечто вроде этого,

Name  Score 
James  15 
Tom  20 
Rodriguez 13 

Я использую «\ т» и как-то успешно делает их выровнены, но затем когда я добавляю какое-то имя, которое немного длиннее, результат становится таким.

Name  Score 
James  15 
Tom  20 
Rodriguez Fernandes 13 

Мой друг сказал мне использовать System.out.printf, но я не уверен, как применять его с массивами, особенно если данные велико. Может ли кто-нибудь помочь мне, как лучше форматировать таблицу, что-то вроде этого?

ответ

1

Для того, чтобы сделать это, вам сначала нужно найти string с максимальной длиной и присоединять (максимальную длину минус длину строки) пространства во время печати всех других названий, например:

public static void print(String[] names, Integer[] score){ 
    //Find the name with max length 
    int maxLength = Arrays.stream(names) 
     .mapToInt(String::length) 
     .max().getAsInt() + 2; 

    //Now, start the printing 
    System.out.println(String.format("%1$-" + maxLength + "s", "Name") + "Score"); 
    for(int i=0 ; i<names.length ; i++){ 
     System.out.println(String.format("%1$-" + maxLength + "s", names[i]) + score[i]); 
    } 
} 

Вот, у меня есть добавлено 2 до максимальной длины, чтобы показать два пустых пространства после имени с максимальной длиной. Это можно назвать от main, например:

public static void main(String[] args) throws Exception{ 
    print(new String[]{"James","Tom","Rodriguez"}, new Integer[]{15,20,30}); 
}