Java 将板坐标显示为ASCII板
我目前有一个1D板坐标数组(例如[“B1”、“D1”、“F1”、“H1”、“E8”]用于棋盘游戏。我已将我的数组“位置”初始化为上述值,但这可能是游戏中任何时间的任何值。此数组的长度根据用户给定的维度而变化。我希望读取此信息并在一个字符串中打印以下内容。除最后一个元素外,每个数组元素都代表X这是YJava 将板坐标显示为ASCII板,java,coordinates,Java,Coordinates,我目前有一个1D板坐标数组(例如[“B1”、“D1”、“F1”、“H1”、“E8”]用于棋盘游戏。我已将我的数组“位置”初始化为上述值,但这可能是游戏中任何时间的任何值。此数组的长度根据用户给定的维度而变化。我希望读取此信息并在一个字符串中打印以下内容。除最后一个元素外,每个数组元素都代表X这是Y ABCDEFGH 1 .X.X.X.X 1 2 ........ 2 3 ........ 3 4 ........ 4 5 ........ 5 6 ........
ABCDEFGH
1 .X.X.X.X 1
2 ........ 2
3 ........ 3
4 ........ 4
5 ........ 5
6 ........ 6
7 ........ 7
8 ....Y... 8
ABCDEFGH
由于这都是一个字符串,我认为我应该使用stringbuilder,但我正在努力找到正确的角度。创建类会更容易,但我希望避免创建任何新类。我曾尝试在没有标记位置的情况下打印整个电路板,但这证明很难进入并更改给定的坐标将ate设置为所需的X/Y
更新:我现在将坐标转换为它们的整数值。因此[“B1”、“D1”、“F1”、“H1”、“E8”]已转换为[2,1,4,1,6,1,8,8]我继续创建了一个可运行的示例,说明了您的要求。我不得不对您的类做一些假设 这是输出
ABCDEFGH
1 .X.X.X.X 1
2 ........ 2
3 ........ 3
4 ........ 4
5 ........ 5
6 ........ 6
7 ........ 7
8 ....Y... 8
ABCDEFGH
下面是一个可运行的示例。我将在代码之后解释我的推理
package com.ggl.testing;
import java.util.ArrayList;
import java.util.List;
public class GameBoard {
private static String[] playerXCoordinates =
{"B1", "D1", "F1", "H1"};
private static String[] playerYCoordinates =
{"E8"};
public static void main(String[] args) {
GameBoard gameBoard = new GameBoard(8, 8);
gameBoard.setPlayersX(playerXCoordinates);
gameBoard.setPlayersY(playerYCoordinates);
System.out.println(gameBoard.toString());
}
private int width, height;
private List<String> playersX;
private List<String> playersY;
public GameBoard(int width, int height) {
this.width = width;
this.height = height;
this.playersX = new ArrayList<String>();
this.playersY = new ArrayList<String>();
}
public void setPlayersX(String[] players) {
for (int i = 0; i < players.length; i++) {
playersX.add(players[i]);
}
}
public void setPlayersY(String[] players) {
for (int i = 0; i < players.length; i++) {
playersY.add(players[i]);
}
}
@Override
public String toString() {
String newLine = System.lineSeparator();
StringBuilder builder = new StringBuilder();
builder.append(createAlphaLine());
builder.append(newLine);
for (int i = 0; i < height; i++) {
builder.append(createBoardLine(i + 1));
builder.append(newLine);
}
builder.append(createAlphaLine());
return builder.toString();
}
private StringBuilder createAlphaLine() {
StringBuilder builder = new StringBuilder();
builder.append(" ");
for (int i = 0; i < width; i++) {
char c = (char) (i + 'A');
builder.append(c);
}
return builder;
}
private StringBuilder createBoardLine(int index) {
StringBuilder builder = new StringBuilder();
builder.append(String.format("%2d", index));
builder.append(" ");
for (int i = 0; i < width; i++) {
char c = (char) (i + 'A');
String s = Character.toString(c) + index;
if (playersX.contains(s)) {
builder.append("X");
} else if (playersY.contains(s)) {
builder.append("Y");
} else {
builder.append(".");
}
}
builder.append(" ");
builder.append(String.format("%2d", index));
return builder;
}
}
为什么要避免创建新类?将元素分组到一个类中是降低您尝试执行的操作复杂性的一种简单方法。请尝试将它们读入
char[][]
数组,然后找到一种方法来显示它。这只是编写规范的一部分,不应创建新类。
ABCDEFGHIJKLMNOPQRSTUVWXYZ
1 .X.X.X.X.................. 1
2 .......................... 2
3 .......................... 3
4 .......................... 4
5 .......................... 5
6 .......................... 6
7 .......................... 7
8 ....Y..................... 8
9 .......................... 9
10 .......................... 10
11 .......................... 11
12 .......................... 12
13 .......................... 13
14 .......................... 14
15 .......................... 15
16 .......................... 16
17 .......................... 17
18 .......................... 18
19 .......................... 19
20 .......................... 20
21 .......................... 21
22 .......................... 22
23 .......................... 23
24 .......................... 24
25 .......................... 25
26 .......................... 26
ABCDEFGHIJKLMNOPQRSTUVWXYZ