【问题标题】:How to access an array from another class that is private in Java?如何从Java中私有的另一个类访问数组?
【发布时间】:2019-04-18 23:15:33
【问题描述】:

我在创建原始国际象棋游戏的项目中设置了 2 个类。我正在尝试从另一个类访问一个数组,但它是私有的。我将如何从不同的类中引用和访问该数组?以下是相关代码部分:

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 语句中的其他数组进行比较。

谢谢!

【问题讨论】:

  • 为什么另一个类需要直接访问数组?一般来说,尽量不要暴露一个类的内部工作。相反,在类中提供方法,为其他类提供所需的信息。

标签: java arrays class if-statement private


【解决方案1】:

最好的解决方案可能是不允许任何其他类直接访问数组,而只让 Board 类自己来做。

这可以通过创建用于移动棋子、打印棋盘等的公共方法来完成

这是一个非常简单的例子

public void move(int fromX, int fromY, int toX, int toY {
    char piece = board[fromX][fromY];
    board[toX][toY] = piece;
} 

那么在另一个类中的用法就是

Board b = new Board();
b.move(4,1,4,3);

您说您想将数组与其他数组进行比较,但如果由 Board 类处理也会更好

public int compareWith(char[][] otherArray) {
    int result = 0;
    //compare
    return result;
}

甚至更好,如果您要比较两个板,那么它会是

public int compareWith(Board otherBoard) {
    int result = 0;
    //compare
    return result;
}

【讨论】:

  • 嗨!感谢您的回答。这是否意味着无法从其他类更改板的布局?
  • @LiamKr 你说的布局是什么意思,而不是板子的大小?
  • 我的意思是改变不同类的数组值
  • @LiamKr,这就是我的move() 方法所做的。所以其他类会调用这个方法来改变布局。
【解决方案2】:

尝试创建一个返回数组或更改其内部的公共方法

例子

public void EditArray(int index1, int index2, char value){ board[index1][index2] = value; }

直接获取数组的值是行不通的,无论如何你都得写方法(对不起我的英文)

【讨论】:

  • 并获取如下值: public char[][] GetBoard() { return board; }
【解决方案3】:

欢迎来到!

对此的传统解决方案是公开该字段:

public char[][] board;

或者,可能更安全、更常见,创建一个 getter 方法:

private char[][] board;
public char[][] getBoard() {
  return board;
}

然后,在另一个类中,您可以创建一个Board 并使用getter 访问它的board

Board myBoard = new Board();
char[][] boardArray = myBoard.getBoard();
//use the array:
System.out.println(boardArray[0][2]);

【讨论】:

  • 谢谢!由于我的声誉低,我不能投票给你,但如果可以的话,我肯定会!然后我将如何在我的其他类中引用该数组?
  • 我添加了一个如何从另一个类访问数组的示例。如果我已经解决了您的问题,请点击勾选标记为已接受。
  • 我想很难从另一个名为 game.java 的类中更改棋盘的布局
猜你喜欢
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多