如何将国际象棋坐标转换为二维数组的行、列

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();
        }
    }