어떻게 각 재생 카드의 값을 카드 한 벌의 배열을 인스턴스화와 비교?

키라 :

내가 사용은 카드 놀이를 표현하기위한 유형 / 클래스를 열거하는 게임이다 Java 프로그램을 개발하기 위해 노력하고있어. 나는 가능한 정장 가능한 계급을 나타내는 열거 유형을 사용하고 싶습니다. 이 게임은 무작위로 카드의 갑판에서 두 개의 카드를 그립니다와 비교합니다.

나는 4 개 클래스, 즉 SimpleCardGame, 카드, 순위 및 정장 있습니다. 현재, 나는 SimpleCardGame 및 카드 문제가 있습니다.

SimpleCardGame를 들어, 내 유일한 문제는 카드의 갑판을 인스턴스화됩니다. 내가 무슨 일을 했는가? 나는 그것을 해결할 수있어되면, "아래 DO NOT HAVE TO MODIFY 아무것도"아래의 모든 부분이 완벽하게 작동한다.

카드의 경우, 공공 INT은 compareTo (카드 C)라는 메소드가 리턴이있다

  • ㅏ. -1이 메소드를 호출하는 객체는 C보다 작 으면

  • 비. 0이 메소드를 호출하는 객체는 C와 같은 경우

  • 씨. 1이 메소드를 호출하는 객체는 C보다 크면

(C1)의 순위가 C2보다 작은, 또는 C1과 C2의 순위가 같은 경우, C1의 정장 (C2)보다 작은 경우 카드 C1은 C2보다 작습니다. 스페이드> 심장> 클럽> 다이아몬드 랭크 순서 : 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

Joshgun :

SimpleCardGame를 들어, 내 유일한 문제는 카드의 갑판을 인스턴스화됩니다. 내가 무슨 일을 했는가?

예, 배열 인스턴스는 적절하지 않다. 당신이 그것을 선언 할 때 배열의 크기를 지정해야합니다. 현재 상황에서 매우 적절한 방법이 될 수있다 :

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

PS : 나는 완전히 모든 문제와 코드를 분석 적이 없다. 그것은 어떤 점에서 문제를 해결한다면, 우리는 앞으로 갈 수 있습니다. (또한 코드에서 일부 서식 및 편집 문제가 있습니다)

추천

출처http://10.200.1.11:23101/article/api/json?id=478636&siteId=1