Как получить доступ к массиву из другого класса, который является частным в Java? - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть 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.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

попробуйте создать публичный метод, возвращающий массив или изменяющий его внутренности

пример

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

получение значений массива напрямую не будет работать, вам придется писать методыв любом случае (извините, мой английский)

0 голосов
/ 15 ноября 2018

Лучшее решение, вероятно, состоит в том, чтобы не позволить любому другому классу обращаться к массиву напрямую, а только сам класс 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;
}
0 голосов
/ 15 ноября 2018

Добро пожаловать на SO!

Традиционными решениями этого было бы либо сделать поле публичным:

public char[][] board;

или, возможно, более безопасный и распространенный метод создания метода получения:

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

Затем в другом классе вы можете создать Board и получить к нему доступ board, используя метод получения:

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