如何为每个玩家声明一个新数组 - 在 for 循环期间

本文关键字:数组 for 循环 新数组 声明 玩家 一个 | 更新日期: 2023-09-27 18:17:58

我有有限数量的玩家用户输入,我必须为每个玩家创建一个一维数组(总是有 5 个成员(。我该怎么做(我需要能够在循环之外使用这些数组(。哦,我不能使用列表。

像这样:

for (int player =1;player<=participants;player++)
{
int matrixnum[] = new int [5];
}

并以某种方式使其将每次迭代更改为matrixnum1matrixnum2... matrixnumparticipants .

如何为每个玩家声明一个新数组 - 在 for 循环期间

你需要的是一个数组数组。

所以每个玩家都需要自己的数组?您应该创建一个具有 int 数组的类Player

public class Player {
  public int[] values;
  public Player() {
    values = new int[5];
  }
}
public class Main {
  ArrayList<Player> players = new ArrayList<Player>();
  public static void main(String[] args) {
    for(int player = 1; player < participants; player++) {
      players.add(new Player());
    }
  }
}

这样做允许您向 Player 类添加一个方法,以便更轻松地修改和使用数组。

编辑:

在阅读了您对另一个答案的评论后,您不想使用类,您应该使用int数组ArrayList

ArrayList<int[]> matrix = new ArrayList<int[]>();
for(int player = 1; player < participants; player++) {
  matrix.add(new int[5]);
}

这使您可以在以后自由添加和删除玩家。

当您需要获取单个玩家的数组时:

int[] somePlayer = matrix.get(indexOfPlayer);

如果您有任何疑问,请阅读有关ArrayList的更多信息。

从这个开始

List<List<int>> jagged = new List<List<int>>(maxParticipals /* optional */);
int participants = 0;
int finite = 15;

然后继续这样的事情

void more(int value)
{
    participants = value;
    while (jagged.Count < participants) jagged.Add(new List<int>(finite));
}

或者这个

void add(int newOnes)
{
    participants += newOnes;
    while (jagged.Count < participants) jagged.Add(new List<int>(finite));
}

我会按以下方式执行此操作:

首先为玩家创建一个包含其所有信息的类:

    public class Player
    {
        public string Name;
        //etc
    }

创建类来管理操作 Add:

   public class PlayersManager
   {
     private readonly Player[,] _players;
     private readonly int _totalNumberOfPlayers;
     private readonly int _topNumberOfTeams;
     private bool PlayerPositionReachedLimit {
        get { return _playerPosition == _topNumberOfTeams; }
     }
     private bool PlayerCounterExcedsTotalPlayers
     {
        get { return _playerCounter >= _totalNumberOfPlayers; }
     }
     private int _playerCounter;
     private int _playerPosition;
    public Player[,] Players
    {
        get { return _players; }
    }
    public PlayersManager(int totalNumberOfPlayers, int topNumberOfTeams)
    {
        _playerCounter = 0;
        _playerPosition = 0;
        _topNumberOfTeams = topNumberOfTeams;
        _totalNumberOfPlayers = totalNumberOfPlayers;
        _players = new Player[totalNumberOfPlayers, topNumberOfTeams];
    }
    public void Add(Player player)
    {
        if (PlayerCounterExcedsTotalPlayers)
          throw new Exception("Number of players exceded");
        if (PlayerPositionReachedLimit)
        {
            _playerCounter++;
            _playerPosition = 0;
        }
        _players[_playerCounter, _playerPosition]= player;
        _playerPosition++;
    }
}

所以你可以做这样的事情:

    [TestMethod]
    public void PruebaPlayersManager()
    {
        var playersManager = new PlayersManager(2, 5);
        for (var i = 0; i <= 9; i++)
        {
            var player = new Player
                             {
                                 Name = i.ToString()
                             };
            playersManager.Add(player);
        }
    }

现在,您不仅限于 5 个,您可以将其配置为您想要的任何大小:)

我希望这有帮助,

干杯