Arraylist внутри экземпляра не является частным - PullRequest
0 голосов
/ 04 февраля 2019

Когда я создаю экземпляр, я создаю ArrayList внутри этого экземпляра и получаю указатель этого точного экземпляра, но когда я добавляю элементы в этот ArrayList, он как бы не добавляет его к нему, а добавляет что-то вроде «public»список ... Когда найден поиск, он захватывает идентификатор SocketChannel для 2 игроков в процессе поиска и добавляет их в созданную комнату (по крайней мере, так должно быть), но это не так ...

Вот какЯ создаю ArrayList в классе комнаты:

private static ArrayList<SocketChannel> room_players = new ArrayList<SocketChannel>();

. Этот код используется для поиска 2 игроков:

room Room = new room(); //
System.out.println("Making a new room");
ArrayList<SocketChannel> player_list = Room.getPlayerList();
SocketChannel s1 = matchmakingPlayers.get(i);
SocketChannel s2 = matchmakingPlayers.get(i-1);
_main.rooms.add(Room);
player_list.add(s1);
player_list.add(s2);

Это вывод, когда у меня подключено 2 клиента:

2 Players were found
Making a new room
Number of players in room: 2

Но результат, когда у меня уже есть 2 игрока в игре, и я хочу найти нового 2:

2 Players were found
Making a new room
Number of players in room: 4

Большое спасибо за любую помощь или совет!

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Но как я могу получить к нему доступ сейчас из других классов?

Существуют разные способы: Вы можете изменить члена с частного на общедоступный ...

public final List<SocketChannel> room_players = new ArrayList<>();

Вы можете создать открытый метод для получения значения ...

public List<SocketChannel> getRoom_players() {
    return room_players;
}

Вы также можете сделать класс Singleton.Если вы хотите, чтобы только один экземпляр класса был общим и доступным из любой точки приложения.Может быть, это не имеет смысла в вашем случае.Информация: https://www.journaldev.com/1377/java-singleton-design-pattern-best-practices-examples

0 голосов
/ 04 февраля 2019

Поскольку room_players является статическим членом, он является общим для всех экземпляров класса.Удаление модификатора static даст каждому экземпляру Room собственный отдельный экземпляр этой переменной.

private final List<SocketChannel> room_players = new ArrayList<>();
...