如何将国际象棋坐标转换为二维数组的行、列
How to convert a chess co-ordinate into row, column for 2D array
我完全被难住了,想知道是否有人知道将国际象棋中的用户输入 "a1" 转换为二维数组中的 [][] 的方法?
下面的代码向您展示了如何进行所需的转换:
String str = "g3";
System.out.println(str.charAt(0) - 'a');
System.out.println(str.charAt(1) - '1');
将打印
6
2
所以
str.charAt(0) - 'a'
转换字母
str.charAt(1) - '1'
转换数字
首先,考虑字符代码点是按字母顺序排列的。由于 Java 中的字符表示为无符号整数,您可以从另一个字符中减去 'a'
的代码点以查看它与 'a'
的距离:'a'-'a' = 0
、'b'-'a' = 1
、'c'-'a' = 2
,依此类推。假设双字符字符串的第一个字符是 a..h 范围内的小写字母,你可以这样得到你的第一个 "coordinate":
int hPos = coord.charAt(0)-'a';
你可以对数字做同样的事情:
int vPos = coord.charAt(1)-'1';
此外,Java supplies a way to extract a digit from a numeric codepoint. 由于 a..h
被认为是 base-18 数字,您也可以使用这种方法:
int hPos = Character.digit(coord.charAt(0), 18) - 10;
int vPos = Character.digit(coord.charAt(1), 10) - 1;
由于棋盘定义明确,另一种方法是使用枚举。例如:
public static void main(String[] args) {
ChessPosition cp = ChessPosition.valueOf("A1");
System.out.println(cp);
cp = ChessPosition.valueOf("H8");
System.out.println(cp);
}
public enum ChessPosition {
A1(0, 0),
// ...
H8(7, 7);
private final int row;
private final int column;
private ChessPosition(int row, int column) {
this.row = row;
this.column = column;
}
public int getRow() {
return row;
}
public int getColumn() {
return column;
}
public String toString() {
return name() + " row=" + getRow() + ", column=" + getColumn();
}
}
我完全被难住了,想知道是否有人知道将国际象棋中的用户输入 "a1" 转换为二维数组中的 [][] 的方法?
下面的代码向您展示了如何进行所需的转换:
String str = "g3";
System.out.println(str.charAt(0) - 'a');
System.out.println(str.charAt(1) - '1');
将打印
6
2
所以
str.charAt(0) - 'a'
转换字母
str.charAt(1) - '1'
转换数字
首先,考虑字符代码点是按字母顺序排列的。由于 Java 中的字符表示为无符号整数,您可以从另一个字符中减去 'a'
的代码点以查看它与 'a'
的距离:'a'-'a' = 0
、'b'-'a' = 1
、'c'-'a' = 2
,依此类推。假设双字符字符串的第一个字符是 a..h 范围内的小写字母,你可以这样得到你的第一个 "coordinate":
int hPos = coord.charAt(0)-'a';
你可以对数字做同样的事情:
int vPos = coord.charAt(1)-'1';
此外,Java supplies a way to extract a digit from a numeric codepoint. 由于 a..h
被认为是 base-18 数字,您也可以使用这种方法:
int hPos = Character.digit(coord.charAt(0), 18) - 10;
int vPos = Character.digit(coord.charAt(1), 10) - 1;
由于棋盘定义明确,另一种方法是使用枚举。例如:
public static void main(String[] args) {
ChessPosition cp = ChessPosition.valueOf("A1");
System.out.println(cp);
cp = ChessPosition.valueOf("H8");
System.out.println(cp);
}
public enum ChessPosition {
A1(0, 0),
// ...
H8(7, 7);
private final int row;
private final int column;
private ChessPosition(int row, int column) {
this.row = row;
this.column = column;
}
public int getRow() {
return row;
}
public int getColumn() {
return column;
}
public String toString() {
return name() + " row=" + getRow() + ", column=" + getColumn();
}
}