如何从 Java 中私有的另一个 class 访问数组?
How to access an array from another class that is private in Java?
我在创建原始国际象棋游戏的项目中设置了 2 个 classes。我正在尝试从另一个 class 访问一个数组,但它是私有的。我将如何从不同的 class 引用和访问该数组?以下是相关代码部分:
private static final char FREE = '.';
private static final char WHITEROOK = '♖';
private static final char BLACKROOK = '♜';
private static final char WHITEBISHOP = '♗';
private static final char BLACKBISHOP = '♝';
private int boardsize;
private char[][] board;
public Board() {
this.boardsize = DEFAULT_SIZE;
board = new char[boardsize][boardsize];
// Clear all playable fields
for(int x=0; x<boardsize; x++)
for(int y=0; y<boardsize; y++)
board[x][y] = FREE;
// Placing Initial Pieces on the board
board[2][0] = WHITEBISHOP;
board[5][0] = WHITEBISHOP;
board[2][7] = BLACKBISHOP;
board[5][7] = BLACKBISHOP;
board[0][0] = WHITEROOK;
board[7][0] = WHITEROOK;
board[0][7] = BLACKROOK;
board[7][7] = BLACKROOK;
}
这是我要访问的棋盘数组,用于与 if 语句中的其他数组进行比较。
谢谢!
欢迎来到 SO!
对此的传统解决方案是使字段 public:
public char[][] board;
或者,创建一个 getter 方法可能更安全、更常见:
private char[][] board;
public char[][] getBoard() {
return board;
}
然后,在另一个 class 中,您可以创建一个 Board
并使用 getter:
访问它的 board
Board myBoard = new Board();
char[][] boardArray = myBoard.getBoard();
//use the array:
System.out.println(boardArray[0][2]);
尝试创建一个 public 返回数组或更改其内部的方法
例子
public void EditArray(int index1, int index2, char value){ board[index1][index2] = value; }
直接获取数组的值是行不通的,无论如何你都必须写方法(对不起我的英语)
最好的解决方案可能是不允许任何其他 class 直接访问数组,只让董事会 class 自己这样做。
这可以通过创建 public 移动棋子、打印棋盘等方法来完成
这是一个非常简单的例子
public void move(int fromX, int fromY, int toX, int toY {
char piece = board[fromX][fromY];
board[toX][toY] = piece;
}
另一个 class 中的用法将是
Board b = new Board();
b.move(4,1,4,3);
你说你想将数组与其他数组进行比较,但如果它由董事会处理也更好class
public int compareWith(char[][] otherArray) {
int result = 0;
//compare
return result;
}
甚至更好,如果您比较两个板,那么它将是
public int compareWith(Board otherBoard) {
int result = 0;
//compare
return result;
}
我在创建原始国际象棋游戏的项目中设置了 2 个 classes。我正在尝试从另一个 class 访问一个数组,但它是私有的。我将如何从不同的 class 引用和访问该数组?以下是相关代码部分:
private static final char FREE = '.';
private static final char WHITEROOK = '♖';
private static final char BLACKROOK = '♜';
private static final char WHITEBISHOP = '♗';
private static final char BLACKBISHOP = '♝';
private int boardsize;
private char[][] board;
public Board() {
this.boardsize = DEFAULT_SIZE;
board = new char[boardsize][boardsize];
// Clear all playable fields
for(int x=0; x<boardsize; x++)
for(int y=0; y<boardsize; y++)
board[x][y] = FREE;
// Placing Initial Pieces on the board
board[2][0] = WHITEBISHOP;
board[5][0] = WHITEBISHOP;
board[2][7] = BLACKBISHOP;
board[5][7] = BLACKBISHOP;
board[0][0] = WHITEROOK;
board[7][0] = WHITEROOK;
board[0][7] = BLACKROOK;
board[7][7] = BLACKROOK;
}
这是我要访问的棋盘数组,用于与 if 语句中的其他数组进行比较。
谢谢!
欢迎来到 SO!
对此的传统解决方案是使字段 public:
public char[][] board;
或者,创建一个 getter 方法可能更安全、更常见:
private char[][] board;
public char[][] getBoard() {
return board;
}
然后,在另一个 class 中,您可以创建一个 Board
并使用 getter:
board
Board myBoard = new Board();
char[][] boardArray = myBoard.getBoard();
//use the array:
System.out.println(boardArray[0][2]);
尝试创建一个 public 返回数组或更改其内部的方法
例子
public void EditArray(int index1, int index2, char value){ board[index1][index2] = value; }
直接获取数组的值是行不通的,无论如何你都必须写方法(对不起我的英语)
最好的解决方案可能是不允许任何其他 class 直接访问数组,只让董事会 class 自己这样做。
这可以通过创建 public 移动棋子、打印棋盘等方法来完成
这是一个非常简单的例子
public void move(int fromX, int fromY, int toX, int toY {
char piece = board[fromX][fromY];
board[toX][toY] = piece;
}
另一个 class 中的用法将是
Board b = new Board();
b.move(4,1,4,3);
你说你想将数组与其他数组进行比较,但如果它由董事会处理也更好class
public int compareWith(char[][] otherArray) {
int result = 0;
//compare
return result;
}
甚至更好,如果您比较两个板,那么它将是
public int compareWith(Board otherBoard) {
int result = 0;
//compare
return result;
}