Как инициализировать массив объектов в Java
Я хочу инициализировать массив объектов игрока для игры в блэкджек. Я много читал о различных способах инициализации примитивных объектов, таких как массив ints или массив строк, но я не могу принять концепцию того, что я пытаюсь сделать здесь (см. ниже). Я хотел бы вернуть массив инициализированных объектов игрока. Количество объектов игрока для создания-это целое число, для которого я запрашиваю пользователя. Я думал, что конструктор может принять целочисленное значение и назвать игрока соответственно при инициализации некоторых переменных-членов объекта игрока. Я думаю, что я близок, но все еще довольно смущен тоже.
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).<init>(String, Throwable) line: 217
ClassNotFoundException(Exception).<init>(String, Throwable) line: not available
ClassNotFoundException.<init>(String) line: not available
URLClassLoader.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
5 ответов:
Это почти нормально. Просто есть:
Player[] thePlayers = new Player[playerCount + 1];
и пусть цикл будет:
for(int i = 0; i < thePlayers.length; i++)
и обратите внимание, что соглашение java диктует, что имена методов и переменных должны начинаться с нижнего регистра.
обновление: поместите свой метод в тело класса.
вместо
Player[PlayerCount] thePlayers;
вы хотите
Player[] thePlayers = new Player[PlayerCount];
и
for(int i = 0; i < PlayerCount ; i++) { thePlayers[i] = new Player(i); } return thePlayers;
должен возвращать массив, инициализированный экземплярами игрока.
EDIT:
до эта таблица в Википедии о соглашениях об именах для java, которые широко используются.
Если вы не знаете размер массива или если он может изменить, вы можете сделать это, чтобы иметь статический массив.
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();
массивы не могут быть изменены после инициализации. Вы должны придать ему значение, и это значение является то, что длина массива остается. Вы можете создать несколько массивов, содержащих определенные части информации игрока, такие как их рука и т. д., а затем создать arrayList для сортировки этих массивов.
еще один спорный момент, который я вижу, и я могу ошибаться в этом, заключается в том, что ваш частный игрок[] InitializePlayers() статичен, где класс теперь нестатичен. Итак:
private Player[] InitializePlayers(int playerCount) { ... }
мой последний пункт будет заключаться в том, что вы, вероятно, должны иметь playerCount объявленный вне метода, который собирается изменить его так, чтобы значение, которое установлено для него, стало новым значением, а не просто отброшено в конце области действия метода."
надеюсь, что это помогает