2012-01-28 1 views
2

Я пытаюсь сделать покерную игру и хочу передавать данные между моей колодой ArrayList и иметь другой список «рука». У меня есть жесткий список моего списка, чтобы включить все 52 карты в стандартную колоду и хотите вытащить первую карту из колоды списка в ручку списка, указав расположение карты в колоде. Из-за перетасовки колоды я не могу ссылаться на имя карты, чтобы перенести ее, и просто нужно указать местоположение карты для передачи в руке. Кто-нибудь знает функцию для этого, способ жестко кодировать это или даже где искать. Я могу прояснить что угодно, если это необходимо.Функция Java для передачи данных между списками?

+0

Что это? вы говорите как карточку _first_, так и некоторую карту по индексу. – Alnitak

+0

Ну, мне нужна первая карта, чтобы я мог справиться с первой карточкой колоды, удалить ссылку на карточку в колоде и затем ссылаться на новую первую карту колоды. – user1174711

ответ

1

Если оба hand и deck имеют тип ArrayList<Card>, то это просто:

hand.add(deck.remove(0)); 

Обратите внимание, что ArrayList не особенно хороший класс для этого, так как он не предназначен для эффективного удаления других, чем на записях конец списка.

+0

Я новичок в Java, как бы вы применили ручку и колоду к одному ArrayList? – user1174711

+0

@ user1174711 вы, вероятно, не хотели бы, они были бы отдельными списками. – Alnitak

+0

Это отлично работает. Спасибо. – user1174711

1

Возможно, вам будет легче, если вы храните свою колоду карт в ArrayDeque. Делая это, вы можете позвонить Collections.shuffle, чтобы перетасовать колоду, и, поскольку вы имеете дело только с pop следующей карточкой с колоды, er, Deque.

+0

Я изучаю это предложение. Это выглядит довольно многообещающе. Спасибо – user1174711

0

Вы должны использовать Stack для колоды, так как это работает с колодой карт, и она действительно «выталкивает» первый объект из коллекции. (Вы также можете использовать generic Queue interface для более современного, безопасного типа, и вы, возможно, все еще можете составить список.)

Вот некоторая информация о shuffling a Stack. Перемешанный стек затем ведет себя точно так же, как колода карт.

+0

Почему бы не передать 'Stack' в' Collections.shuffle'? 'Stack' основан на' Vector' - посмотрите на 'ArrayDeque' для несинхронизированной альтернативы. (новый по 1.6). – Paul

+0

В настоящее время я использую Collections.shuffle в своем ArrayList. Что делать, если вы используете стек для этого? – user1174711

+0

Выгода заключается в том, что стек уже работает как колода. Он моделирует реальный мир для вас из коробки, поэтому вам нужно написать меньше логики, чтобы управлять ArrayList, чтобы вести себя как колода. @Paul: Это то, что предлагает перетасовка ссылки Stack. –

0

Вы можете использовать remove(int index). Он возвращает объект по индексу и удаляет его из списка.