Java:当我将对象的名称作为字符串时,如何返回该对象?
假设我正在构建一个国际象棋游戏并创建棋盘空间对象。我正在创建这样的对象,棋盘上的所有空格都精确到64个: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
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;
}
如何使用已存在对象名称的正确字符串表示形式来实际检索该对象?同样,对象没有名称。是的,变量确实存在,但变量名不是字符串,而且编译代码中几乎不存在变量名。您需要的是一种获取对感兴趣对象的引用的方法,有多种方法可以做到这一点,包括:
如映射
。通过这种方式,可以将字符串与唯一对象关联哈希映射
- 一种集合,如
,允许您通过int索引获取对象ArrayList
- 一个简单的BoardSpace数组,如
BoardSpace[64]
- 二维嵌套集合,如
列表
- 或二维数组
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();
}
}
}
同样,对象没有名称。是的,变量确实存在,但变量名不是字符串,而且编译代码中几乎不存在变量名。您需要的是一种获取对感兴趣对象的引用的方法,有多种方法可以做到这一点,包括:
如映射
。通过这种方式,可以将字符串与唯一对象关联哈希映射
- 一种集合,如
,允许您通过int索引获取对象ArrayList
- 一个简单的BoardSpace数组,如
BoardSpace[64]
- 二维嵌套集合,如
列表
- 或二维数组
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;
}
}