Как инициализировать массив объектов в Java

Я хочу инициализировать массив объектов Player для игры BlackJack. Я много читал о различных способах инициализации примитивных объектов, таких как массив ints или массив строк, но я не могу принять концепцию к тому, что я пытаюсь сделать здесь (см. Ниже). Я хотел бы вернуть массив инициализированных объектов Player. Количество создаваемых объектов игрока – это целое число, для которого я запрашиваю пользователя. Я думал, что конструктор может принять целочисленное значение и назвать игрока соответствующим образом при инициализации некоторых переменных-членов объекта Player. Я думаю, что я близок, но все еще довольно смущен.

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; } 

EDIT – UPDATE: Вот что я получаю после изменения этого, поскольку я понял ваше предложение:

 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 

Это почти прекрасно. Просто иметь:

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

И пусть цикл будет:

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

И обратите внимание, что java-соглашение диктует, что имена методов и переменных должны начинаться с нижнего регистра.

Обновление: поместите свой метод в тело classа.

Вместо

 Player[PlayerCount] thePlayers; 

вы хотите

 Player[] thePlayers = new Player[PlayerCount]; 

а также

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

должен возвращать массив, инициализированный экземплярами Player.

РЕДАКТИРОВАТЬ:

Просмотрите эту таблицу в википедии о соглашениях об именах для широко используемой Java.

Если вы не уверены в размере массива или можете его изменить, вы можете сделать это с помощью статического массива.

 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(); 

После инициализации массивы не изменяются. Вы должны дать ему значение, и это значение – это то, что эта длина массива остается. Вы можете создать несколько массивов, чтобы содержать определенные части информации игрока, такие как их arm и т. Д., А затем создать массивList для сортировки пастуха этих массивов.

Еще одна точка зрения, которую я вижу, и я могу ошибаться в этом, заключается в том, что ваш частный Player [] InitializePlayers () является статическим, когда class теперь не статичен. Так:

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

Моим последним моментом было то, что вы, вероятно, должны были объявить playerCount вне метода, который изменит его так, чтобы значение, которое ему установлено, также стало новым значением, и оно не просто отбрасывается в конце метода “объем.”

Надеюсь это поможет

thePlayers[i] = new Player(i); Я просто удалил i внутри Player(i) ; и это сработало.

поэтому строка кода должна быть:

 thePlayers[i] = new Player9(); 
  • Объект Bound и unbound method в Python
  • Инициализация свойства, точечная нотация
  • Разница между classами, объектами и экземплярами
  • Ссылка на объект требуется для нестатического поля, метода или свойства?
  • Сколько объектов создано из-за наследования в java?
  • динамический тип объекта
  • Давайте будем гением компьютера.