syntax
@syntax

Как получить разные элементы одного массива для разных объетов класса?

Приветствую. Есть массив String[] в котором 32 элемента(карты). Есть класс Players. Необходимо написать такой метод getCards, чтобы при вызове Players p1.getCards, каждый из игроков(p1,p2,p3,p4) получал по 8 разных элементов массива, идущих подряд(p1 получает первые 8 элементов, p2 следующие 8). Натолкните на мысль, как организовать метод getCards? С java только знакомлюсь, и не уверен, что лучшим вариантом будет использовать массив. Возможно, что красивее\эффективнее будет использовтаь коллецию. Спасибо!
  • Вопрос задан
  • 3076 просмотров
Решения вопроса 1
В классе Player хранить индекс (0, 1, 2, 3) игрока playerIdx.

Метод getCards что-то вроде:

String[] getCards() {
    String[] ret = new String[8];

    int l = playerIdx * 8;
    int r = l + 8;
    for (int i = l, j = 0; i < r; i++, j++)
        ret[j] = cards[i]; 

    return ret;
}


Если вместо стрингового массива будет ArrayList, то можно будет в одну строку, используя метод subList().
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
xanep
@xanep
Очевидно, вам нужно использовать очередь для колоды карт, вместо массива.
Сам я не знаком с Джава, поэтому конкретные классы/методы не подскажу.
Ответ написан
Комментировать
@xave
Я немного не понял, p1 — экземпляр класса Players, соответственно его метод .getCards() не статический, но в то же время он выполняет одно и то же действие у любого экземпляра этого класса (т.е. от экземпляра не зависит), а значит логично объявить его статическим.

Допустим, он у вас статический. Тогда логично хранить список игроков (экземпляров класса Players) внутри самого класса Players, запретить инстанс от него через new, сделав конструктор приватным и использовать для создания экземпляров статический метод getInstance(), при обращении к которому список игроков внутри класса Players обновлялся бы.
Далее у вас есть ваш метод Players.getCards(String[] cards), тоже статический. Нет никаких проблем в том, чтобы пробежаться по списку игроков в этом классе, и каждому дать кусок массива cards через System.arrayCopy(). Можете карты хранить в ArrayList, а не в массиве, из пока концепция программы не видна, чтобы говорить, что уместнее.
Ответ написан
Комментировать
VYBGSS
@VYBGSS
Software Developer
Да по-разному можно. Можно и в отдельном статическом классе Game склепать статический SortCards, который будет передавать экземплярам Players нужные карты, только getCards тогда не будут без параметров.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы