Работа с массивами шаблонов списков в Java - PullRequest
0 голосов
/ 26 марта 2010

Я пишу карточную игру в Java, где мне нужно разложить карты из колоды на несколько столбцов, пока у меня не останется фиксированное количество карт. Вот как я это делаю.

public class Column extends ArrayList {}
List deck = Cards.createNewDeck();
Column[] columns = new Column[10];
int c = 0;

while (deck.size() > 50) {
    if (c == 10) {
        c = 0;
    }
    if (columns[c] == null) {
        columns[c] = new Column();
    }
    columns[c].add(Cards.dealTopCard(deck));
    c += 1;
}

Это как-то кажется неуклюжим. Есть ли более читаемый / всеобъемлющий способ сделать то же самое?

Ответы [ 2 ]

1 голос
/ 26 марта 2010
public class Column extends ArrayList {}
List deck = Cards.createNewDeck();
Column[] columns = new Column[10];
int c = 0;

for (int i = 0; deck.size() > 50; i = (i+1)%10)
{
  if (columns[i] == null)
    columns[i] = new Column();

  columns[i].add(Cards.dealTopCard(deck));
}

Оператор по модулю (%) дает остаток от целочисленного деления между двумя числами, фактически давая вам число, которое возвращается к 0 при достижении 10.

Кстати, вы должны решить: используйте двумерный массив или просто ArrayLists, не путайте вещи.

Тогда, поскольку дженерики существуют, используйте их вместо расширяющих классов: для этого и нужен параметрический полиморфизм! Что-то вроде:

ArrayList<Int, ArrayList<Card>> columns = new ArrayList<ArrayList<Card>>();
0 голосов
/ 26 марта 2010
  • Не используйте необработанные типы.
  • Не смешивайте массивы со списками.

Я предлагаю определить List<Pile<Card>> columns, где Pile<Card> имеет List<Card>.

Затем определите тип дилера, который преобразует Deck<Card> в несколько Pile<Card>. Это упрощает использование различных стратегий колоды на кучу на всякий случай.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...