Java 计算一个类中的成员数

Java 计算一个类中的成员数,java,Java,我正在用java制作一个小游戏,供学校使用。 现在我想数一数玩家的数量,代码是: Player player1; player1 = new Player(); player1.name = "Name1"; player1.score = 0; player1.lives = 100.0; Player player2; player2 = new Player(); player2.name = "Name2";

我正在用java制作一个小游戏,供学校使用。 现在我想数一数玩家的数量,代码是:

    Player player1;
    player1 = new Player();

    player1.name = "Name1";
    player1.score = 0;
    player1.lives = 100.0;

    Player player2;
    player2 = new Player();

    player2.name = "Name2";
    player2.score = 0;
    player2.lives = 50.0;
在播放器中,使用在播放器构造函数中递增的计数

private static int playerCount = 0;

//constructor
Player(){   
  playerCount++; 
}

将所有玩家放在一个列表中:

List<Player> allPlayers = new ArrayList<Player>();
Player player;

player = new Player();
player.name = "Name1";
player.score = 0;
player.lives = 100.0;

allPlayers.add(player);

player = new Player();
player.name = "Name2";
player.score = 0;
player.lives = 50.0;
allPlayers.add(player);

allPlayers.size(); //Number of players
player = allPlayers.get(0); //Player 1
player = allPlayers.get(1); //Player 2
List allPlayers=new ArrayList();
玩家;
player=新玩家();
player.name=“Name1”;
player.score=0;
player.lifes=100.0;
所有玩家。添加(玩家);
player=新玩家();
player.name=“Name2”;
player.score=0;
player.lifes=50.0;
所有玩家。添加(玩家);
所有玩家。大小()//球员人数
player=allPlayers.get(0)//玩家1
player=allPlayers.get(1)//玩家2

最好的方法是使用容器类,它是
java.util.Collections
的后代

当玩家被添加时,他将被添加到集合中。当玩家退出游戏时,他将被从集合中移除。因此,要确定任何时刻的玩家数量,只需计算集合的成员(如果使用java.util预实现集合,则该集合已经实现)

即使如此,也有两种方法。其中一个是有缺陷的,我将首先演示有缺陷的技术(这并不比其他人提供的静态反例好多少)


或者类似的东西。基本上,主要的想法是让您当前的玩家列表与玩家创建处于同一级别。有一百万种变体,这取决于发起呼叫的来源;然而,其主要思想是相同的:显式取消玩家注册,而不是直接与对象生命周期挂钩。

您必须通过将所有
玩家
对象放入
集合
来跟踪它们,例如计算类的实例数是很困难的,因为很难知道它们何时消失。更简单的可能是拥有一个计算玩家数量的“游戏”。当对象被销毁时会发生什么?我认为对于这个应用程序,他并不关心。他只是试图保持快速而肮脏的计数。如果对象被销毁,您将必须实现自己的垃圾收集器,该收集器可以识别收集的对象是否为Player类型,并将计数减少1。我理解不考虑被销毁对象的含义。我只是觉得这对他的申请不重要。@Grammin你可能会认为这不重要,但你只是在猜测这对他是否重要。无论哪种方式,如果它真的成为一个问题,您只是嵌入了一点混乱的代码,需要一点技巧才能正确地清理。
private static HashSet<Player> players = new HashSet<Player>();

public Player() {
  players.add(this);
}

public static int getPlayerCount() {
  return players.size();
}
HashSet<Player> players = new HashSet<Player>();
Player player = new Player("bob");
players.add(player);

... later on ...

players.remove(player);