如何将国际象棋坐标转换为2D数组的行,列

时间:2018-11-06 18:22:05

标签: java arrays chess

我很困惑,想知道是否有人知道将国际象棋中的“ a1”用户输入转换为二维数组中的[] []的方法?

3 个答案:

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