Сборка колоды карт в Java с использованием 2 разных ENUMS

1

У меня есть лаборатория для класса (нам разрешено искать внешнюю помощь), создавая klondike solitaire. Я полный noob, когда дело доходит до программирования (это мой первый класс в программировании). Мы только что узнали о перечислениях, и мне нужно построить колоду, используя их (я просмотрел другие вопросы об этом, но я не нашел решение, которое соответствует тому, что мне нужно). У нас есть две перечисления (ранг и костюм):

public enum Rank {
ACE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE,
TEN,
JACK,
QUEEN,
KING;}

а также

public enum Suit {    
CLUBS,
SPADES,
HEARTS,
DIAMONDS;}

Теперь мне нужно объединить их в массив под названием Deck, который стоит как таковой:

public Deck() {
    cards = new Card[52];
}

Чтобы положить карты в колоду, я пытался использовать ".values", но я не могу понять это правильно. В этой лаборатории есть тестовый код, и он говорит, что я не получаю ни одного из пунктов для этого. Что я делаю не так?

    public void fill() {
        for (int i = 0; i<52;i++){
        for (Suit s : Suit.values()) {
        for (Rank r : Rank.values()) {
            cards[i]= new Card(r,s);
   }
   }
   }
   } 

Буду признателен за любую оказанную помощь. Благодарю!

  • 0
    Ваши внутренние петли создают каждый костюм для каждого ранга. Это каждая карта, вам не нужно делать это 52 раза, потому что она просто собирается делать то же самое. То, что вы хотите, это положить разные карты в каждую ячейку.
Теги:
enums

1 ответ

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

Вы заявляете,

Теперь мне нужно объединить их в массив под названием Deck, который стоит как таковой:

Нет, вам нужно создать классную карточку, в которой есть одно поле каждого перечисления. Только после этого вы можете создать палубу своих карт. Итак, сделайте это - создайте класс Card, дайте ему по крайней мере два поля, по одному для каждого перечисления, плюс соответствующий конструктор, плюс getters, плюс приличный toString() а затем вы установите.

Кроме того, это неправильно:

public void fill() {
    for (int i = 0; i<52;i++){ // get rid of this loop
    for (Suit s : Suit.values()) {
    for (Rank r : Rank.values()) {
        cards[i]= new Card(r,s);
}

В приведенном выше коде будет поставлено 52 карты в каждое индексное место. Например, он попытается набить все 52 карты в место карты [0], то же самое для элемента карты [1], и будет добавлена только последняя карта. У вас будет массив из 52 King of Diamonds - не то, что вы хотите.

Вместо этого избавиться от внешнего цикла и вместо этого увеличить я внутри вашего цикла:

public void fill() {
  int i = 0;
  for (Suit s : Suit.values()) {
    for (Rank r : Rank.values()) {
      cards[i]= new Card(r,s);
      i++;  // increment i here
    }
  }
}

Ещё вопросы

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