2016-02-12 6 views
0

Я столкнулся с некоторой загадкой в ​​личном проекте Java, над которым я работаю. Я хочу напечатать двумерный массив строк в виде таблицы. Не сами строки, но и ярлыки строк и столбцов (подумайте Microsoft Excel). Это то, что я предполагаю, что готовый продукт будет, со звездочками, представляющими, куда должны идти строки.Печать 2D-массива в виде сетки? (Java)

| A | B | C | D | E | F | G | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    1 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    2 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    3 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    4 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    5 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    6 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    7 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    8 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
    9 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 
10 | * | * | * | * | * | * | * | 
----+---------+---------+---------+---------+---------+---------+---------+ 

Я знаю, что это будет использовать вложенный цикл вперед, и что логический процесс будет ставить значения строковых во внутреннем цикле, как «например, [я] [J]» тип формата. Я просто смущен тем, как я собираюсь создать дизайн вокруг ячеек в правильном формате, ограничивая каждую строку до 10 символов, например, как Excel ограничивает размер своих ячеек при сжатии. Я использую подстроку для этого? Использовать ли printf для правильной разметки 10-й строки?

Любые указатели очень ценятся, я никогда не был в тупике, как раньше.

+2

Сообщите свое мнение. –

+1

Используйте printf для печати одной строки. Сделайте это методом. Начните оттуда. –

ответ

1

Первая строка должна быть достаточно простой, если вы не превысите 26 столбцов, то есть имя столбца равно A до Z.

Четные линии являются вводными данными ----+, а затем повторениями столбцаCount ---------+.

Нечетные линии (кроме первого) являются вводными цифрами 999 |, где 999 - номер строки с правосторонним выравниванием, с ведущими пробелами. Это можно сделать с помощью printf() или String.format() со строкой формата
"%3d |".

После ввода в колонку колонны повторяются строковые значения, обрезаются и выравниваются по центру на 9 символов, за которыми следует |.

До центра выравнивать 9 символов, выполните следующие действия:

  • Если длина> 9, обрезать до 9 (да, с помощью substring()).
  • В противном случае вычислить необходимые пространства, то есть spacesTotal = 9 - trimmedLength.
    Вычислить пробелы слева: spaceBefore = spacesTotal/2.
    Вычислите свободные пространства справа: spaceAfter = spacesTotal - spaceBefore.
    Таким образом, нечетное число таких пространств, как 5, становится 2 до и 3 после.
    Теперь напечатайте spaceBefore пробелы, текст (обрезанный), затем spaceAfter пробелов и |.
+0

Большое спасибо, Андреас. Это отвечало на все мои вопросы. Благодарю вас! Ценить это. –

0
public static void printStringGrid(String[][] array){ 
    System.out.print(" |"); 
    for (int i = 0; i < array[0].length; i++){ 
     System.out.print(" "); 
     System.out.print((char)('A' + i)); 
     System.out.print(" |"); 
    } 
    System.out.println(); 
    for (int i = 0; i < array.length; i++){ 
     System.out.print("----+"); 
     for (int j = 0; j < array[0].length; j++){ 
      System.out.print("---------+"); 
     } 
     System.out.println(); 
     System.out.print(" " + (i + 1) + " |"); 
     for (int j = 0; j < array[0].length; j++){ 
      if (array[i][j].length() < 10){ 
       int spaces = (9 - array[i][j].length())/2; 
       for (int k = 0; k < spaces; k++){ 
        System.out.print(" "); 
       } 
       System.out.print(array[i][j]); 
       for (int k = 0; k < (9 - array[i][j].length()) - spaces; k++){ 
        System.out.print(" "); 
       } 
      } 
      else{ 
       System.out.print(array[i][j].substring(0, 9)); 
      } 
      System.out.print("|"); 
     } 
     System.out.println(); 
    } 
} 
Смежные вопросы