Я пытаюсь сделать покерную игру и хочу передавать данные между моей колодой ArrayList и иметь другой список «рука». У меня есть жесткий список моего списка, чтобы включить все 52 карты в стандартную колоду и хотите вытащить первую карту из колоды списка в ручку списка, указав расположение карты в колоде. Из-за перетасовки колоды я не могу ссылаться на имя карты, чтобы перенести ее, и просто нужно указать местоположение карты для передачи в руке. Кто-нибудь знает функцию для этого, способ жестко кодировать это или даже где искать. Я могу прояснить что угодно, если это необходимо.Функция Java для передачи данных между списками?
ответ
Если оба hand
и deck
имеют тип ArrayList<Card>
, то это просто:
hand.add(deck.remove(0));
Обратите внимание, что ArrayList
не особенно хороший класс для этого, так как он не предназначен для эффективного удаления других, чем на записях конец списка.
Я новичок в Java, как бы вы применили ручку и колоду к одному ArrayList? – user1174711
@ user1174711 вы, вероятно, не хотели бы, они были бы отдельными списками. – Alnitak
Это отлично работает. Спасибо. – user1174711
Возможно, вам будет легче, если вы храните свою колоду карт в ArrayDeque
. Делая это, вы можете позвонить Collections.shuffle
, чтобы перетасовать колоду, и, поскольку вы имеете дело только с pop
следующей карточкой с колоды, er, Deque
.
Я изучаю это предложение. Это выглядит довольно многообещающе. Спасибо – user1174711
Вы должны использовать Stack для колоды, так как это работает с колодой карт, и она действительно «выталкивает» первый объект из коллекции. (Вы также можете использовать generic Queue interface для более современного, безопасного типа, и вы, возможно, все еще можете составить список.)
Вот некоторая информация о shuffling a Stack. Перемешанный стек затем ведет себя точно так же, как колода карт.
Почему бы не передать 'Stack' в' Collections.shuffle'? 'Stack' основан на' Vector' - посмотрите на 'ArrayDeque' для несинхронизированной альтернативы. (новый по 1.6). – Paul
В настоящее время я использую Collections.shuffle в своем ArrayList. Что делать, если вы используете стек для этого? – user1174711
Выгода заключается в том, что стек уже работает как колода. Он моделирует реальный мир для вас из коробки, поэтому вам нужно написать меньше логики, чтобы управлять ArrayList, чтобы вести себя как колода. @Paul: Это то, что предлагает перетасовка ссылки Stack. –
Вы можете использовать remove(int index). Он возвращает объект по индексу и удаляет его из списка.
Что это? вы говорите как карточку _first_, так и некоторую карту по индексу. – Alnitak
Ну, мне нужна первая карта, чтобы я мог справиться с первой карточкой колоды, удалить ссылку на карточку в колоде и затем ссылаться на новую первую карту колоды. – user1174711