0

私はJavaを使用しています。私は2つのクラスを持っています

class Card
class Deck extends Card

コンストラクターエラーが発生します。

私は大学のためにブラックジャックゲームを作らなければならず、デッキクラスは延長されなければなりません。

この問題を解決するにはどうすればよいですか?

class Card
{
    int rank, suit;
    String[] suits = { "hearts", "spades", "diamonds", "clubs" };
    String[] ranks  = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };

    Card(int suit, int rank)
    {
        this.rank=rank;
        this.suit=suit;
    }

    String toString()
    {
          return ranks[rank] + " of " + suits[suit];
    }

    int getRank() {
         return rank;
    }

    int getSuit() {
        return suit;
    }
}




class Deck extends Card{

    ArrayList <Card> cards;
    int numberdeck;
    Deck()
    {
        cards = new ArrayList<Card>();
        for (int a=0; a<=3; a++)
        {
            for (int b=0; b<=12; b++)
            {
                cards.add( new Card(a,b) );
            }
        }
    }

    Card drawFromDeck()
    {
        Random generator = new Random();
        int index= generator.nextInt( cards.size() );
        return cards.remove(index);
    }

    int getTotalCards()
    {
        return cards.size();
    }
}
4

2 に答える 2

3

サブクラスのコンストラクターは、スーパークラスの対応するコンストラクターを呼び出すことになっていますが、そのようなコンストラクターはコードに見つかりません。

スーパークラスに引数をとらないコンストラクターを追加するか、サブクラスのコンストラクターにスーパークラスのコンストラクターを呼び出させます。

super(0, 0);サブクラスのコンストラクターの本体の先頭を使用して、スーパークラスのコンストラクターを呼び出すことができます。

于 2012-11-29T00:56:54.337 に答える
2

Deck本当に拡張すべきではありませんCard。サブクラス化はis-a関係をエンコードします。ライオンは動物なので、Lion extends Animal。getRank()メソッドとgetSuit()メソッドはカードのデッキ全体では意味がないため、サブクラス化は不適切であることがわかります。

カードのデッキはカードではありません。デッキには他のカードが含まれています。contains関係は、すでにArrayList <Card> cards配列によって表されています。

于 2012-11-29T00:59:50.267 に答える