在Java控制台上设计输出
我正在做一个单人纸牌游戏,仅用于控制台。我在将列表显示为以下内容时遇到问题: 我看见有人用C++做了,上面是图片。有没有用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", "
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;你试过什么吗?是的。。请看我编辑的帖子。