Как создать массив колоды карт и сравнить значения каждой игральной карты? - PullRequest
2 голосов
/ 07 марта 2020

Я пытаюсь разработать программу Java, в которой используются перечисляемые типы / классы для представления игральных карт. Я хочу использовать перечисляемые типы для представления возможных мастей и возможных рангов. Игра случайным образом вытаскивает aws две карты из колоды карт и сравнивает их.

У меня есть 4 класса, а именно SimpleCardGame, Card, Rank и Suit. В настоящее время у меня проблемы с SimpleCardGame и Card.

Для SimpleCardGame моей единственной проблемой является создание колоды карт. Что я сделал не так? Как только я смогу это решить, вся часть под надписью «ВАМ НЕ НУЖНО МОДИФИЦИРОВАТЬ НИЖЕ НИЖЕ» будет отлично работать.

Для Card есть метод publi c int compareTo (Card c), который возвращает

  • a. -1, если объект, вызывающий этот метод, меньше c

  • b. 0, если объект, вызывающий этот метод, совпадает с c

  • c. 1, если объект, вызывающий этот метод, больше c

Карта c1 меньше, чем c2, если ранг c1 меньше, чем c2, или если ранги c1 и c2 равны то же самое, костюм с1 меньше, чем с2. Орден костюмов: Spade> Heart> Club> Бриллиантовый орден рангов: A> K> Q> J> 10> 9> 8> 7> 6> 5> 4> 3> 2

Так что моя проблема для это как сравнить значения карт? Я думаю об использовании метода порядкового значения, но я не совсем уверен, как его использовать.

public class SimpleCardGame {

  public static void main(String[] args) {

    Card cards[];  // an array of Cards, representing a deck of cards

    // put a copy of each card into cards
    // The order of the cards in the array is: 
    // S2, S3, ..., SK, H2, ..., HK, C2, ..., CK, D2, ..., DK

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

    }

    //
    // YOU DO NOT HAVE TO MODIFY ANYTHING BELOW
    //
    // print out the whole deck once
    System.out.println("The whole deck is:");
    for (Card card : cards)
      System.out.print(card + " ");
    System.out.println();

    // randomly draw two cards 
    MyRandom rnd = new MyRandom();
    Card c1 = cards[rnd.nextInt(cards.length)-1];
    Card c2 = cards[rnd.nextInt(cards.length)-1];

    System.out.println("Two cards are drawn:");
    System.out.println("c1 = " + c1 + " and c2 = " + c2);

    // compare c1 and c2
    if (c1.compareTo(c2) < 0) {
      System.out.println(c1 + " is smaller than " + c2);
    }
    else if (c1.compareTo(c2) == 0) { 
      System.out.println(c1 + " is the same as " + c2); 
    }
    else {
      System.out.println(c1 + " is larger than " + c2);
    }
  }
}


public class Card {
    private Rank rank;
    private Suit suit;

    public Card (Suit suit, Rank rank) {
        this.rank = rank;
        this.suit = suit;
    }

    public String toString() {
        return suit + "" + rank;
    }

    public int compareTo(Card c) {
        int diffRank = rank - c.rank;
        if (diffRank < 0) {
            return -1;
        }
        else if (diffRank > 0) {
            return 1;
        }
        else if (diffRank == 0) {
            int diffSuit = suit - c.suit;
            if (diffSuit < 0) {
                return -1;
            }
            else if (diffSuit > 0) {
                return 1;
            } 
        }
        return 0;
    }
}

public enum Rank {
  TWO("2"), 
  THREE("3"), 
  FOUR("4"), 
  FIVE("5"), 
  SIX("6"), 
  SEVEN("7"), 
  EIGHT("8"),
  NINE("9"), 
  TEN("10"), 
  JACK("J"), 
  QUEEN("Q"), 
  KING("K"),
  ACE("A"); 

  private String rank;

  // Constructor
  Rank (String r) {
    rank = r;
  }

  public String toString() {
    return rank;
  }
}
public enum Suit {
    SPADE("S"), 
    HEART("H"), 
    CLUB("C"), 
    DIAMOND("D"); 

    private String suit;

    Suit (String s) {
      suit = s;
    }

    public String toString() {
      return suit;
    }
}

Ниже приведен примерный вывод программы.

The whole deck is:
S2 S3 S4 S5 S6 S7 S8 S9 S10 SJ SQ SK SA H2 H3 H4 H5 H6 H7 H8 H9 H10 HJ HQ HK HA C2 C3 C4 C5 C6 C7 C8 C9 C10 CJ CQ CK CA D2 D3 D4 D5 D6 D7 D8 D9 D10 DJ DQ DK DA 
Two cards are drawn:
c1 = S7 and c2 = HQ
S7 is smaller than HQ

1 Ответ

2 голосов
/ 07 марта 2020

Для SimpleCardGame моей единственной проблемой является создание колоды карт. Что я сделал не так?

Да, ваш экземпляр массива некорректен. Вы должны указать размер массива при его объявлении. Таким образом, в текущей ситуации правильным способом может быть:

Card cards[] = new Card[Suit.values().length * Rank.values().length];

PS: я не полностью проанализировал всю проблему и код. Так что, если это решит вашу проблему в какой-то момент, мы можем go переслать. (также есть некоторые проблемы с форматированием и компиляцией в вашем коде)

...