在Java控制台上设计输出

在Java控制台上设计输出,java,console,Java,Console,我正在做一个单人纸牌游戏,仅用于控制台。我在将列表显示为以下内容时遇到问题: 我看见有人用C++做了,上面是图片。有没有用Java实现的方法 这是我目前的代码: final String[] cards = { "2C", "2D", "2H", "2S", "3C", "3D", "3H", "3S", "4C", "4D", "4H", "4S", "5C", "5D", "5H", "5S", "6C", "

我正在做一个单人纸牌游戏,仅用于控制台。我在将列表显示为以下内容时遇到问题:

我看见有人用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();
}
final String[]卡片={
“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;
对于(int r=0;r<7;r++){
int e=r;
对于(int c=0;c<7;c++){
如果(e!=0){
系统输出打印(字符串格式(“%5s”和“);
e--;
}否则{
系统输出打印(字符串格式(“%5s”,卡片[i]);
i++;
}
}
System.out.println();
}
以下是输出结果:

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

可以吗

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();
    }
最终静态字符串[]卡={
“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;
对于(int r=0;r<7;r++){
系统输出打印(空格子串(0,r*5));
for(int c=r;c<7;c++){
系统输出打印(字符串格式(“%5s”,卡片[i]);
i++;
}
System.out.println();
}

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

我会在你的电路板上使用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
),但您可以用您选择的字符串替换它


注意:当在数组上迭代时,对每个循环使用a或限制为
数组。与硬编码数字相比,长度更可取。

Yes;你试过什么吗?是的。。请看我编辑的帖子。