2016-01-08 2 views
-2

Я делаю пасьянс только для консоли. У меня есть проблема, отображающая список в нечто вроде этого:Проектирование вывода на консоли Java

enter image description here

Я видел, кто-то сделать это в C++, это выше картина. Есть ли способ сделать это на Java?

Это мой код до сих пор:

final String[] cards = { 
     "2C", "2D", "2H", "2S", 
     "3C", "3D", "3H", "3S", 
     "4C", "4D", "4H", "4S", 
     "5C", "5D", "5H", "5S", 
     "6C", "6D", "6H", "6S", 
     "7C", "7D", "7H", "7S", 
     "8C", "8D", "8H", "8S", 
     "9C", "9D", "9H", "9S", 
     "10C", "10D", "10H", "10S", 
     "JC", "JD", "JH", "JS", 
     "QC", "QD", "QH", "QS", 
     "KC", "KD", "KH", "KS", 
     "AC", "AD", "AH", "AS"}; 

int i = 0; 
for (int r = 0; r < 7; r++) { 
    int e = r; 
    for (int c = 0; c < 7; c++) { 
     if (e != 0) { 
      System.out.print(String.format("%5s", " ")); 
      e--; 
     } else { 
      System.out.print(String.format("%5s", cards[i])); 
      i++; 
     } 
    } 
    System.out.println(); 
} 

Вот что выглядит результат:

enter image description here

Проблема заключается в том, что мне нужно добавить несколько пустых строк, чтобы получить такого рода вывода. Есть ли другой путь?

+4

Да; вы вообще что-то пробовали? – ChiefTwoPencils

+0

Да .. посмотри мой пост Я его отредактировал. –

ответ

2

Я бы использовал 2D-массив для вашей доски, потому что это лучшее представление об этом и, следовательно, более легко манипулировать. Тогда я должен был бы метод, который отвечает за отображение массива в консоли, которая будет вызываться всякий раз, когда обновление необходимо:

public class Example { 

    static String[][] board; 

    static void display() { 

     for (String[] row : board) { 
      for (String card : row) { 
       System.out.print(card + "\t"); 
      } 
      System.out.println(); 
     } 
    } 

    public static void main(String[] args) { 

     board = new String[][] { 
      { " 1C", " 2C", " 3C", " 4C", " 5C", " 6C", " 7C" }, 
      { " ", " 1H", "10H", " AC", " 5C", " 6C", "10D" }, 
      { " ", " ", "10H", " AC", " 5C", " 6C", "10D" }, 
      { " ", " ", " ", " AC", " 5C", " 6C", " QS" }, 
      { " ", " ", " ", " ", " 5C", " 6C", " KS" }, 
      { " ", " ", " ", " ", " ", " 6C", " AS" }, 
      { " ", " ", " ", " ", " ", " ", "10D" }}; 

     display(); 
    } 
} 

Выход:

1C  2C  3C  4C  5C  6C  7C 
     1H  10H  AC  5C  6C  10D 
       10H  AC  5C  6C  10D 
         AC  5C  6C  QS 
           5C  6C  KS 
             6C  AS 
               10D 

Обратите внимание, что некоторые карты 2 символов длинные, а некоторые - 3. Чтобы правильно выровнять вывод, я сделал все карты длиной 3 символа с ведущим пространством. Что касается пространства между столбцами, я выбрал вкладку (\t), но вы можете заменить ее на строку по вашему выбору.

Примечание: при переборе над массивом, используя для каждого-контура или ограничения для array.length предпочтительнее жесткого кодирования числа.

+0

Спасибо за замечательное решение. –

0

Это будет нормально?

final static String[] cards = { 
    "2C", "2D", "2H", "2S", 
    "3C", "3D", "3H", "3S", 
    "4C", "4D", "4H", "4S", 
    "5C", "5D", "5H", "5S", 
    "6C", "6D", "6H", "6S", 
    "7C", "7D", "7H", "7S", 
    "8C", "8D", "8H", "8S", 
    "9C", "9D", "9H", "9S", 
    "10C", "10D", "10H", "10S", 
    "JC", "JD", "JH", "JS", 
    "QC", "QD", "QH", "QS", 
    "KC", "KD", "KH", "KS", 
    "AC", "AD", "AH", "AS"}; 

final static String space = "                  "; 

    int i = 0; 
    for (int r = 0; r < 7; r++) { 
     System.out.print(space.substring(0,r*5)); 
     for (int c = r; c < 7; c++) { 
      System.out.print(String.format("%5s", cards[i])); 
      i++; 
     } 
     System.out.println(); 
    } 

Предоставлено, вы все еще добавляете строки на выход, но это быстрее и выглядит лучше.

Смежные вопросы