在控制台Java上设计输出

时间:2016-01-08 02:55:54

标签: java console

我正在为控制台制作单人纸牌游戏。我在将列表显示为以下内容时遇到问题:

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

问题是我需要添加一些空字符串来获得这种输出。还有其他办法吗?

2 个答案:

答案 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),但您可以用您选择的字符串替换它。

注意:在遍历数组时,使用 for-each 循环或限制为array.length比对数字进行硬编码更可取。

答案 1 :(得分: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();
    }

当然,你仍然在输出中添加字符串,但它更快,看起来更好。