Como inicializar uma matriz de objects em Java

Eu quero inicializar uma matriz de objects Player para um jogo de BlackJack. Eu li muito sobre várias maneiras de inicializar objects primitivos como uma matriz de ints ou uma matriz de strings, mas não consigo levar o conceito ao que estou tentando fazer aqui (veja abaixo). Gostaria de retornar uma matriz de objects Player inicializados. O número de objects de jogador para criar é um inteiro para o qual eu solicito ao usuário. Eu estava pensando que o construtor poderia aceitar um valor inteiro e nomear o player de acordo enquanto inicializava algumas variables ​​de membro do object Player. Eu acho que estou perto, mas ainda bastante confuso também.

static class Player { private String Name; private int handValue; private boolean BlackJack; private TheCard[] Hand; public Player(int i) { if (i == 0) { this.Name = "Dealer"; } else { this.Name = "Player_" + String.valueOf(i); } this.handValue = 0; this.BlackJack = false; this.Hand = new TheCard[2]; } } private static Player[] InitializePlayers(int PlayerCount) { //The line below never completes after applying the suggested change Player[PlayerCount] thePlayers; for(int i = 0; i < PlayerCount + 1; i++) { thePlayers[i] = new Player(i); } return thePlayers; } 

EDITAR – ATUALIZAR: Aqui está o que eu estou recebendo depois de mudar isso, como eu entendi sua sugestão:

 Thread [main] (Suspended) ClassNotFoundException(Throwable).(String, Throwable) line: 217 ClassNotFoundException(Exception).(String, Throwable) line: not available ClassNotFoundException.(String) line: not available URLClassLoader$1.run() line: not available AccessController.doPrivileged(PrivilegedExceptionAction, AccessControlContext) line: not available [native method] Launcher$ExtClassLoader(URLClassLoader).findClass(String) line: not available Launcher$ExtClassLoader.findClass(String) line: not available Launcher$ExtClassLoader(ClassLoader).loadClass(String, boolean) line: not available Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not available Launcher$AppClassLoader.loadClass(String, boolean) line: not available Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available BlackJackCardGame.InitializePlayers(int) line: 30 BlackJackCardGame.main(String[]) line: 249 

Está quase tudo bem. Apenas tenha:

 Player[] thePlayers = new Player[playerCount + 1]; 

E deixe o loop ser:

 for(int i = 0; i < thePlayers.length; i++) 

E observe que a convenção java determina que os nomes de methods e variables ​​devem começar com letras minúsculas.

Atualização: coloque seu método no corpo da turma.

Ao invés de

 Player[PlayerCount] thePlayers; 

você quer

 Player[] thePlayers = new Player[PlayerCount]; 

e

 for(int i = 0; i < PlayerCount ; i++) { thePlayers[i] = new Player(i); } return thePlayers; 

deve retornar o array inicializado com instâncias do Player.

EDITAR:

Confira esta tabela na wikipedia sobre convenções de nomenclatura para java que é amplamente usada.

Se você não tiver certeza do tamanho da matriz ou se pode mudar, você pode fazer isso para ter uma matriz estática.

 ArrayList thePlayersList = new ArrayList(); thePlayersList.add(new Player(1)); thePlayersList.add(new Player(2)); . . //Some code here that changes the number of players eg Players[] thePlayers = thePlayersList.toArray(); 

Arrays não são alteráveis ​​após a boot. Você tem que dar um valor, e esse valor é o que esse comprimento de matriz permanece. Você pode criar vários arrays para conter certas partes da informação do jogador, como a sua mão e tal, e então criar um arrayList para classificar esses arrays.

Outro ponto de discórdia que vejo, e posso estar errado sobre isso, é o fato de que o seu Player privado [] InitializePlayers () é estático, onde a class é agora não-estática. Assim:

 private Player[] InitializePlayers(int playerCount) { ... } 

Meu último ponto seria que você provavelmente deveria ter o playerCount declarado fora do método que irá mudá-lo para que o valor que é definido para ele se torne o novo valor também e ele não seja simplesmente descartado no final do método. “escopo.”

Espero que isto ajude

thePlayers[i] = new Player(i); Acabei de apagar o i dentro do Player(i) ; e funcionou.

então a linha de código deve ser:

 thePlayers[i] = new Player9();