カードのデッキの配列をインスタンス化し、各プレイカードの値を比較するには?

吉良:

私は、用途がトランプを表現するための型/クラスを列挙することをゲームであるJavaプログラムを開発しようとしています。私は、可能なスーツや可能性のランクを表すために列挙型を使用します。ゲームはランダムにカードのデッキからカードを2枚引き、それらを比較します。

私は4つのクラス、すなわちSimpleCardGame、カード、ランクとスーツを持っています。現在、私はSimpleCardGameとカードとの問題を抱えています。

SimpleCardGameのために、私の唯一の問題は、カードのデッキをインスタンス化されます。私は間違って何をしたのですか?私はそれを解決することができるよたら、下記の全体部分「YOU DO NOT HAVE TO MODIFYは、以下のANYTHINGは」完璧に働くことになります。

カードの場合は、返品することを公共のintのcompareTo(カードC)と呼ばれる方法があります

  • A。-1このメソッドを呼び出すオブジェクトは、cよりも小さい場合

  • B。0このメソッドを呼び出すオブジェクトは、Cと同じである場合

  • 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=478640&siteId=1