我很困惑,想知道是否有人知道将国际象棋中的“ a1”用户输入转换为二维数组中的[] []的方法?
答案 0 :(得分:2)
以下代码显示了如何进行所需的转换:
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'
变换数字
答案 1 :(得分:2)
首先,考虑字符代码点按字母顺序排列。由于Java中的字符表示为无符号整数,因此您可以从另一个字符中减去'a'
的代码点,以查看与'a'
的距离:'a'-'a' = 0
,'b'-'a' = 1
, 'c'-'a' = 2
,依此类推。假设两个字符的字符串的第一个字符是a..h范围内的小写字母,则可以这样获得第一个“坐标”:
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
被认为是以18为底的数字,因此您也可以使用以下方法:
int hPos = Character.digit(coord.charAt(0), 18) - 10;
int vPos = Character.digit(coord.charAt(1), 10) - 1;
答案 2 :(得分:2)
由于棋盘定义明确,另一种方法是使用枚举。例如:
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();
}
}