Есть ли способ перебрать все элементы перечисления, чтобы добавить их в LinkedList?
Пример, который я пытаюсь сделать: я делаю колоду карт. У меня есть 2 перечисления: ранг и ценность. Используя цикл inested for, я хочу, чтобы каждая карта колоды добавлена в ArrayList, используя 2 перечисления.
Благодарю!
Вы можете просто использовать статическую функцию.values() класса enum.
Вы можете использовать:
for(Rank rank : Rank.values()) {
for (Value val : Value.values()) {
// stuff
}
}
Попробуй это:
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;
}
Я думаю, вам нужно что-то вроде этого:
for(Rank r : Rank.values()){
for(Value v : Value.values()) {
// new Car(r, v);
}
}
Это предполагает, что у вас есть класс Card, с конструктором, который принимает каждое перечисление в качестве параметра. Для хранения карт вам также понадобится список или другая коллекция.
Enums имеют метод values()
, который возвращает массив экземпляров.
Используйте две вложенные циклы foreach:
List<Card> deck = new LinkedList<>();
for (Suit suit : Suit.values())
for (Rank rank : Rank.values())
deck.add(new Card(suit, rank));
Первое, что вам нужно сделать, это создать класс Card
.
После этого .values()
каждый элемент первого enum (используйте .values()
чтобы получить каждый элемент), и для каждого элемента .values()
цикл через каждый элемент второго перечисления. В этом втором цикле создайте новую Card
с этими значениями.