Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将国际象棋坐标转换为二维数组的行、列_Java_Arrays_Chess - Fatal编程技术网

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

Java 如何将国际象棋坐标转换为二维数组的行、列,java,arrays,chess,Java,Arrays,Chess,我完全被难住了,不知道是否有人知道如何将用户输入的国际象棋中的a1转换为二维数组中的[][]?下面的代码向您展示了如何进行所需的转换: String str = "g3"; System.out.println(str.charAt(0) - 'a'); System.out.println(str.charAt(1) - '1'); 将打印 6 2 所以 str.charAt0-'a'转换字母 STAR.CARAT1-‘1’首先转换数字,考虑字符代码点按字母顺序排列。由于Java中的字符表

我完全被难住了,不知道是否有人知道如何将用户输入的国际象棋中的a1转换为二维数组中的[][]?

下面的代码向您展示了如何进行所需的转换:

String str = "g3";
System.out.println(str.charAt(0) - 'a');
System.out.println(str.charAt(1) - '1');
将打印

6
2
所以 str.charAt0-'a'转换字母
STAR.CARAT1-‘1’首先转换数字

,考虑字符代码点按字母顺序排列。由于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';
此外,由于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();
        }
    }

非常有用!非常感谢你!为什么不试试呢?参见[askl],但是编码问题应该有一个。国际象棋坐标始终是列-行对,并且每个坐标始终是单个字符,最多两个字符。一种简单的方法是将坐标拆分为一列和一行,并在将列和行转换为实际索引后将其用作2D数组的索引-如何操作取决于您,但一种简单的方法是按原样使用行,并通过简单的A->1,B->2转换将列转换为索引。小心使用基于0和1的索引!但是,这将如何为所有的信工作?谢谢你的答复顺便说一句@marinalder方法charAt0返回字符串第0个索引处的字符,但当与诸如charAt0-'a'之类的算术运算组合时,返回字符的ASCII码。因此,如果字符是'a',那么字符0-'a'>'a'-'a'->0,如果字符是'b',那么字符0-'a'>'b'-'a'->1,…,如果字符是'h',那么字符0-'a'>'h'->'a'->'7。所以它适用于所有的信件。我对你的解释感激不尽!我正在尝试从用户输入转换任何国际象棋坐标