Как инициализировать массив объектов в Java
593694 просмотра
5 ответа
Я хочу инициализировать массив объектов Player для игры в блэкджек. Я много читал о различных способах инициализации примитивных объектов, таких как массив целых или массив строк, но я не могу принять концепцию к тому, что я пытаюсь сделать здесь (см. Ниже). Я хотел бы вернуть массив инициализированных объектов 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;
}
РЕДАКТИРОВАТЬ - ОБНОВЛЕНИЕ: Вот что я получаю после изменения этого, как я понял ваше предложение:
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
Автор: John Adams
Источник
Размещён: 13.11.2019 11:30
Ответы (5)
91 плюса
Это почти нормально. Просто иметь:
Player[] thePlayers = new Player[playerCount + 1];
И пусть цикл будет:
for(int i = 0; i < thePlayers.length; i++)
И обратите внимание, что соглашение Java предписывает, чтобы имена методов и переменных начинались со строчных букв.
Обновление: поместите ваш метод в тело класса.
Автор: Bozho Размещён: 04.05.2011 07:4821 плюса
Вместо
Player[PlayerCount] thePlayers;
ты хочешь
Player[] thePlayers = new Player[PlayerCount];
а также
for(int i = 0; i < PlayerCount ; i++)
{
thePlayers[i] = new Player(i);
}
return thePlayers;
должен вернуть массив, инициализированный экземплярами Player.
РЕДАКТИРОВАТЬ:
Обязательно посмотрите эту таблицу в Википедии о соглашениях по именованию для Java, которая широко используется.
Автор: Bala R Размещён: 04.05.2011 07:4814 плюса
Если вы не уверены в размере массива или можете изменить его, вы можете сделать это, чтобы получить статический массив.
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();
Автор: Ugur Kumru
Размещён: 15.06.2011 02:35
1 плюс
Массивы не могут быть изменены после инициализации. Вы должны дать ему значение, и это значение останется на том же уровне. Вы можете создать несколько массивов, которые будут содержать определенные части информации об игроке, такие как их рука и т. Д., А затем создать arrayList для сортировки этих массивов.
Еще один спорный вопрос, который я вижу, и я могу ошибаться по этому поводу, заключается в том, что ваш приватный Player [] InitializePlayers () является статическим, когда класс теперь нестатический. Так:
private Player[] InitializePlayers(int playerCount)
{
...
}
Последнее, что я хотел бы сказать, это то, что вам, вероятно, следует объявить playerCount вне метода, который изменит его, так что значение, которое ему присвоено, также станет новым значением, и его не просто отбросят в конце метода "объем."
Надеюсь это поможет
Автор: Dragoons299 Размещён: 18.04.2013 02:190 плюса
thePlayers[i] = new Player(i);
Я просто удалил i
изнутри Player(i)
; и это сработало.
поэтому строка кода должна быть:
thePlayers[i] = new Player9();
Автор: Ali yasar Erdogan
Размещён: 02.07.2015 07:36
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- arrays Как удалить дубликаты из массива C #?
- arrays Как определить размер моего массива в C?
- arrays Каков наилучший способ конвертировать массив в хеш в Ruby
- arrays Сравнение двухбайтовых массивов в .NET
- arrays Можно ли выполнять параллельные обходы в MATLAB так же, как в Python?
- object Вызов функции модуля с использованием его имени (строки)
- object Создайте базовый итератор Python
- object Обнаружение неопределенного свойства объекта
- object Каков наиболее эффективный способ глубокого клонирования объекта в JavaScript?
- object Как определить равенство для двух объектов JavaScript?
- initialization Are delphi variables initialized with a value by default?
- initialization How to initialize private static members in C++?
- initialization Как инициализировать все элементы массива одним и тем же значением?
- initialization Почему мы не можем инициализировать элементы внутри структуры?
- initialization Python - создать список с начальной емкостью