我正在为控制台制作单人纸牌游戏。我在将列表显示为以下内容时遇到问题:
我看到有人用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();
}
以下是输出结果:
问题是我需要添加一些空字符串来获得这种输出。还有其他办法吗?
答案 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();
}
当然,你仍然在输出中添加字符串,但它更快,看起来更好。