【发布时间】:2019-02-04 01:21:35
【问题描述】:
当我创建一个实例时,我在该实例中创建了一个 ArrayList,并获得了该实例的指针,但是当我向该 ArrayList 添加项目时,它并没有将其添加到其中,而是添加到有点像“公共”列表... 找到匹配后,它会在匹配中获取 2 个玩家的 SocketChannel id 并将它们添加到创建的房间(至少应该如此),但它没有......
这就是我在房间类中创建 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
非常感谢您的任何帮助或建议!
【问题讨论】:
-
private在 Java 中意味着(粗略地说)“类及其嵌套类的私有”。这并不意味着“私有到单个实例”。因此,即使您删除了static,在某些情况下,另一个实例中的方法调用仍然可以看到和修改private变量。 -
room Room = new room();???你的外壳被翻转了。 Java命名约定是类名以大写字母开头,变量名以小写字母开头,所以应该是Room room = new Room(); -
另外我建议你编程到接口并使用
List<T> list = new ArrayList<>();而不是ArrayList<T> list = new ArrayList<>();