tamaño - que es un array en java
Cómo inicializar una matriz de objetos en Java (5)
En lugar de
Player[PlayerCount] thePlayers;
usted quiere
Player[] thePlayers = new Player[PlayerCount];
y
for(int i = 0; i < PlayerCount ; i++)
{
thePlayers[i] = new Player(i);
}
return thePlayers;
debería devolver la matriz inicializada con instancias del reproductor.
EDITAR:
Consulte esta tabla en wikipedia sobre convenciones de nombres para Java que se usa ampliamente.
Quiero inicializar una matriz de objetos Player para un juego BlackJack. He leído mucho sobre varias formas de inicializar objetos primitivos como una matriz de entradas o una matriz de cadenas, pero no puedo llevar el concepto a lo que estoy tratando de hacer aquí (ver más abajo). Me gustaría devolver una matriz de objetos de jugador inicializados. El número de objetos de jugador para crear es un número entero por el cual le pido al usuario. Estaba pensando que el constructor podría aceptar un valor entero y nombrar al jugador en consecuencia al inicializar algunas variables miembro del objeto Player. Creo que estoy cerca, pero todavía bastante confundido.
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 - ACTUALIZAR: Esto es lo que recibo después de cambiar esto ya que entendí su sugerencia:
Thread [main] (Suspended)
ClassNotFoundException(Throwable).<init>(String, Throwable) line: 217
ClassNotFoundException(Exception).<init>(String, Throwable) line: not available
ClassNotFoundException.<init>(String) line: not available
URLClassLoader$1.run() line: not available
AccessController.doPrivileged(PrivilegedExceptionAction<T>, 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á casi bien. Sólo tiene:
Player[] thePlayers = new Player[playerCount + 1];
Y que el bucle sea:
for(int i = 0; i < thePlayers.length; i++)
Y tenga en cuenta que la convención de Java dicta que los nombres de los métodos y las variables deben comenzar con minúsculas.
Actualización: ponga su método dentro del cuerpo de la clase.
Las matrices no son modificables después de la inicialización. Tienes que darle un valor, y ese valor es lo que permanece esa longitud de matriz. Puede crear múltiples matrices para contener ciertas partes de la información del jugador como su mano y tal, y luego crear una lista de parcelas para ordenar las parrillas.
Otro punto de controversia que veo, y puedo estar equivocado al respecto, es el hecho de que su Player privado [] InitializePlayers () es estático donde la clase ahora no es estática. Asi que:
private Player[] InitializePlayers(int playerCount)
{
...
}
Mi último punto sería que probablemente deberías declarar a playerCount fuera del método que va a cambiarlo para que el valor que se establezca se convierta también en el nuevo valor y no se descarte al final del método. "alcance."
Espero que esto ayude
Si no está seguro del tamaño de la matriz o si puede cambiar, puede usar esta conversación para tener una matriz estática.
ArrayList<Player> thePlayersList = new ArrayList<Player>();
thePlayersList.add(new Player(1));
thePlayersList.add(new Player(2));
.
.
//Some code here that changes the number of players e.g
Players[] thePlayers = thePlayersList.toArray();
thePlayers[i] = new Player(i);
Acabo de eliminar el i
dentro de Player(i)
; Y funcionó.
entonces la línea de código debería ser:
thePlayers[i] = new Player9();