0

だから私は、カードのデッキを実装しなければならないラボを持っています (私たちは外部の助けを求めることが許されているので、ここで私は多くの頭を悩ませています)。num を作成するには、enum クラスを使用する必要があります。

スーツの場合:

public enum Suits {
CLUBS, HEARTS, DIAMONDS, SPADES

}

数字の場合:

public enum Numerals {
DEUCE(2), THREE(3), FOUR(4), FIVE(5), SIX(6), SEVEN(7), EIGHT(8), NINE(9), 
TEN(10), JACK(11), QUEEN(12), KING(13), ACE(14);

}

私のカード クラスは非常に簡単ですが、次の 2 つのコード ブロックについてはよくわかりません。

    public int compareTo (Card aCard){
    if (aCard.aNumeral.equals(this.aNumeral) && aCard.aSuit.equals(this.aSuit)){
        return 0;
    }
    else {
        return -1;
    }
}

    public boolean equals (Card aCard){
    if (this.compareTo(aCard) == 0){
        return true;
    }
    else {
        return false;
    }
}

トリッキーな部分...デッキ...

したがって、Cloneable、Iterable、および Comparator を使用してデッキを実装する必要があります。

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;

public class Deck implements Cloneable, Iterable<Card>, Comparator<Card> {

private ArrayList<Card> cards;

public Deck (){
    for (Card c : cards){


    }

}

私はコンストラクタをまとめるのに苦労しています。ArrayList を使用して、ソートされた 52 枚のカードを本質的に「保持」することを計画しています (ご覧のとおり)。しかし、最終的にはソートされたデッキを返さなければなりません。どこに行くべきかについての提案はありますか?

4

3 に答える 3

1

に関する質問に答えるには、が より小さい場合は負の値を返し、が より大きい場合は正の値を返し、等しい場合は 0 を返す必要がありますcompareTo。また、オブジェクトを順序付けする場合、順序付けが従うべき規則の 1 つは、 if 、 thenです。(" is less than " と " is less than "の両方を持つことはできません)。カードが等しくないときはいつでも戻ってくるあなたのは、このルールに従いません。これを修正するには、順序を決定する必要があります。「ソートされたデッキ」はどのように見えますか? おそらくすべてのクラブが一緒になっていて、その後にすべてのダイヤモンドなどが続きます。a.compareTo(b)ababa.compareTo(b) < 0b.compareTo(a) > 0abbacompareTo-1クラブカードはどのダイヤモンドカードよりも安くなります。これを正しく行うには、最初にスートを比較し、スートが等しい場合にのみランクを比較する必要があります。

public int compareTo (Card aCard){
    int suitCompare = this.aSuit.compareTo(aCard.aSuit);
    if (suitCompare != 0)  {
        return suitCompare;
    }
    return this.aNumeral.compareTo(aCard.aNumeral);
}

compareToそれぞれのは、、、またはenumを返します。したがって、スーツを比較し、またはの値を返し、スーツが等しい場合はランクを比較できます。これは、複数のデータをチェックする必要があるメソッドを作成するための一般的なアプローチです。<00>0<0>0compareTo

于 2014-02-04T02:09:15.670 に答える