Добавление всех элементов из перечисления в ArrayList

1

Есть ли способ перебрать все элементы перечисления, чтобы добавить их в LinkedList?

Пример, который я пытаюсь сделать: я делаю колоду карт. У меня есть 2 перечисления: ранг и ценность. Используя цикл inested for, я хочу, чтобы каждая карта колоды добавлена в ArrayList, используя 2 перечисления.

Благодарю!

  • 0
    Итак, вы хотите каждую перестановку двух перечислений?
  • 1
    @DanielKaplan Да.
Теги:
arraylist
enums

5 ответов

3
Лучший ответ

Вы можете просто использовать статическую функцию.values() класса enum.

Вы можете использовать:

for(Rank rank : Rank.values()) {
  for (Value val : Value.values()) {
    // stuff
  }
}
2

Попробуй это:

enum Rank { ... }

enum Suit { ... }

class Card {
    Rank rank;
    Suit suit;

    Card(Rank r, Suit s) { rank = r; suit = s; }
}

Тогда позже..

List<Card> all() {
    List<Card> cards = new ArrayList<>();
    for (Rank r : Rank.values()) {
        for (Suit s : Suit.values()) {
            cards.add(new Card(r, s));
        }
    }

    return cards;
}
1

Я думаю, вам нужно что-то вроде этого:

for(Rank r : Rank.values()){
    for(Value v : Value.values()) {
        // new Car(r, v);
    }
}

Это предполагает, что у вас есть класс Card, с конструктором, который принимает каждое перечисление в качестве параметра. Для хранения карт вам также понадобится список или другая коллекция.

1

Enums имеют метод values(), который возвращает массив экземпляров.

Используйте две вложенные циклы foreach:

List<Card> deck = new LinkedList<>();
for (Suit suit : Suit.values())
    for (Rank rank : Rank.values())
        deck.add(new Card(suit, rank));
1

Первое, что вам нужно сделать, это создать класс Card.

После этого .values() каждый элемент первого enum (используйте .values() чтобы получить каждый элемент), и для каждого элемента .values() цикл через каждый элемент второго перечисления. В этом втором цикле создайте новую Card с этими значениями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню