Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.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_String_Class_Object - Fatal编程技术网

Java:当我将对象的名称作为字符串时,如何返回该对象?

Java:当我将对象的名称作为字符串时,如何返回该对象?,java,string,class,object,Java,String,Class,Object,假设我正在构建一个国际象棋游戏并创建棋盘空间对象。我正在创建这样的对象,棋盘上的所有空格都精确到64个: BoardSpace a1 = new BoardSpace("black", 1, 1, true); 下面是我为BoardSpace对象创建的类: public class BoardSpace { String color; int x_pos; int y_pos; boolean occupied; //constructor p

假设我正在构建一个国际象棋游戏并创建棋盘空间对象。我正在创建这样的对象,棋盘上的所有空格都精确到64个:

BoardSpace a1 = new BoardSpace("black", 1, 1, true);
下面是我为BoardSpace对象创建的类:

public class BoardSpace {
    String color;
    int x_pos;
    int y_pos;
    boolean occupied;

    //constructor
    public BoardSpace (String color, int x_pos, int y_pos, boolean occupied) { 
        this.color = color;
        this.x_pos = x_pos; 
        this.y_pos = y_pos; 
        this.occupied = occupied;
    } 
}
在棋盘上移动棋子之前,我创建了所有BoardSpace对象。我的棋子对象每个都有一个x位置和y位置。我想做的是将它们的坐标转换成一个BoardPiece名称,然后从该名称中检索以前创建的BoardPiece对象

这就是我想做的:

static String get_BoardSpace_color(int x_pos, int y_pos){
    int modified_x = x_pos + 96; //adjusting for ASCII
    char c = (char)(modified_x);
    String space_name = ""+c+y_pos;

    BoardSpace piece = (BoardSpace)(space_name); //PROBLEM AREA

    return piece.color;
}
如何使用已存在对象名称的正确字符串表示形式来实际检索该对象?

同样,对象没有名称。是的,变量确实存在,但变量名不是字符串,而且编译代码中几乎不存在变量名。您需要的是一种获取对感兴趣对象的引用的方法,有多种方法可以做到这一点,包括:

  • 映射
    哈希映射
    。通过这种方式,可以将字符串与唯一对象关联
  • 一种集合,如
    ArrayList
    ,允许您通过int索引获取对象
  • 一个简单的BoardSpace数组,如
    BoardSpace[64]
  • 二维嵌套集合,如
    列表
  • 或二维数组
由于您似乎正在制作一个8 x 8的板空间网格,而且这些尺寸可能不会改变,因此最简单的方法是创建一个8x8的对象阵列:

private BoardSpace[][] grid = new BoardSpace[8][8];
然后可以使用x和y(或行和列)索引来获取感兴趣的对象

例如:

public class TestBoardSpace {
    public static void main(String[] args) {
        Board board = new Board();
        for (int y = 0; y < Board.ROWS; y++) {
            for (int x = 0; x < Board.COLS; x++) {
                System.out.printf("%8s ", board.getBoardSpace(x, y).getColor());
            }
            System.out.println();
        }
    }
}

同样,对象没有名称。是的,变量确实存在,但变量名不是字符串,而且编译代码中几乎不存在变量名。您需要的是一种获取对感兴趣对象的引用的方法,有多种方法可以做到这一点,包括:

  • 映射
    哈希映射
    。通过这种方式,可以将字符串与唯一对象关联
  • 一种集合,如
    ArrayList
    ,允许您通过int索引获取对象
  • 一个简单的BoardSpace数组,如
    BoardSpace[64]
  • 二维嵌套集合,如
    列表
  • 或二维数组
由于您似乎正在制作一个8 x 8的板空间网格,而且这些尺寸可能不会改变,因此最简单的方法是创建一个8x8的对象阵列:

private BoardSpace[][] grid = new BoardSpace[8][8];
然后可以使用x和y(或行和列)索引来获取感兴趣的对象

例如:

public class TestBoardSpace {
    public static void main(String[] args) {
        Board board = new Board();
        for (int y = 0; y < Board.ROWS; y++) {
            for (int x = 0; x < Board.COLS; x++) {
                System.out.printf("%8s ", board.getBoardSpace(x, y).getColor());
            }
            System.out.println();
        }
    }
}


对象没有名称。为什么不创建一个8x8 2D板空间数组,比如称为
grid
,然后简单地获取
grid[x_pos][y_pos]
对象?我建议对颜色变量使用
enum
而不是
string
。您无法访问变量的名称。不要试图通过变量名访问内容,而是将实例存储在某个集合中。比如一个
列表
或者一个数组。然后在那里访问它们,例如
list.get(4)
array[4]
。对象没有名称。为什么不创建一个8x8 2D板空间数组,比如称为
grid
,然后简单地获取
grid[x_pos][y_pos]
对象?我建议对颜色变量使用
enum
而不是
string
。您无法访问变量的名称。不要试图通过变量名访问内容,而是将实例存储在某个集合中。比如一个
列表
或者一个数组。然后在那里访问它们,例如
列表。获取(4)
数组[4]
。非常感谢@莉莉:不客气。这是国际象棋还是跳棋?如果是这样,您可能希望创建方法将秩和文件字符转换为适当的数组索引,反之亦然。非常感谢@莉莉:不客气。这是国际象棋还是跳棋?如果是这样,您可能希望创建方法将秩和文件字符转换为适当的数组索引,反之亦然。
class BoardSpace {
    private MyColor color;
    private int x_pos;
    private int y_pos;
    private boolean occupied;

    // constructor
    public BoardSpace(MyColor color, int x_pos, int y_pos, boolean occupied) {
        this.color = color;
        this.x_pos = x_pos;
        this.y_pos = y_pos;
        this.occupied = occupied;
    }

    public boolean isOccupied() {
        return occupied;
    }

    public void setOccupied(boolean occupied) {
        this.occupied = occupied;
    }

    public MyColor getColor() {
        return color;
    }

    public int getX_pos() {
        return x_pos;
    }

    public int getY_pos() {
        return y_pos;
    }

}