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

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

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

Спасибо!


person Salmononius2    schedule 05.02.2015    source источник
comment
Итак, вы хотите каждую перестановку двух перечислений?   -  person Daniel Kaplan    schedule 06.02.2015


Ответы (5)


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

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

for(Rank rank : Rank.values()) {
  for (Value val : Value.values()) {
    // stuff
  }
}
person tonio    schedule 05.02.2015

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

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;
}
person David Xu    schedule 05.02.2015

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

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

person Daniel Kaplan    schedule 05.02.2015

Я думаю, вы хотите что-то вроде этого:

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

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

person Michael Murray    schedule 05.02.2015

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

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

List<Card> deck = new LinkedList<>();
for (Suit suit : Suit.values())
    for (Rank rank : Rank.values())
        deck.add(new Card(suit, rank));
person Bohemian♦    schedule 05.02.2015