如何从 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;
}