2017-05-06 16 views
0

okですので、次のコンストラクタを持つクラス "Card"があります。スーツとランクはフィールドとして格納されます。デフォルトのコンストラクタはありません - 継承

Card(String s, int r){ 
    suit = s; 
    rank = r; 
} 

私は事は私は私が持っているカードのクラスCard c = new Card();への参照を行う場合Hand という名前の別のクラスからこのメソッドを呼び出す必要である。この方法

public int getRank(){ 
    return rank; 
} 

でランクを返すようにしたいですコンストラクタにパラメータを入力します。私はこれをしたくありません。 私はHandCardを拡張させることを試みたが、その後、私はエラー

なしデフォルトコンストラクタ

を取得し、私は解決策を探してきましたが、私はちょうどそれが仕事を得ることができません。
私の質問です:この問題を回避するにはどうすればよいですか?

編集:ハンドクラス

public class Hand extends Card { 
    Deck d = new Deck(); 
    Hand h = new Hand(); 
    ArrayList<Card> hand = new ArrayList<>(); 


    public void giveMeCard(){ 
     hand.add(d.dealCard()); 
    } 


    public ArrayList returnHand(){ 
     return hand; 
    } 

public int rank(){ 


    } 

} 
+0

あなた 'Hand'クラスを投稿してください。 – hqt

+2

引数なしでCardコンストラクタを呼び出す場合、Cardクラスには引数を取らないコンストラクタが必要です。しかし、スーツやランクのないカードはどのように役立つでしょうか?継承は完全に無関係です。手はカードではないので、手はカードを伸ばしてはならない。それは意味をなさない。 –

+0

いや、あなたは 'カードC =新しいカード()'と呼ばれてきたとき、C 'は、保持するために、 'たいどのようなカード手のクラス –

答えて

0

Iクラスは何のパラメータなしのコンストラクタを持っていない場合、サブクラスは、基本クラスのコンストラクタ既存のいずれかを呼び出す必要があります。あなたのケースでは

あなたはそう、あなたが技術的な側面についてです

Hand extend Card { 
Hand() { 
    super("s","r"); 
} 

を持っている必要があります、基本クラス

class Card { 
    Card(String s, int r){ 
} 

を持っています。モデリングとロジック面については、は全く意味がありません。HandCardです。 HandCardではありません。これにはset of cardsが含まれています(おそらく空のセット=手元にカードはありません)。また、(おそらく)手持ちのカードの上限があります(あなたがモデル化したゲームに依存します)。

カードのモデルは正しいです。それはスーツとランクを持っていなければなりません(これらのフィールドはCardクラスのプライベートファイナルでなければなりません)。あなたのカードは不変でなければなりません。プレイヤーは手元のカードを他のカードに変更できないはずですか?実際にはRankSuitをenumとしてモデル化しています(それらはよく知られた、限定された値のセットを持っています)。 いずれの場合でも(文字列または列挙型のランク/スーツ)、equals/hashcodeCardおよびHandクラスに必要です。

Cardsをenums、またはfinal staticフィールドをCardクラス(実際のカードの場合は1つ)としてモデルしたいイベントがあります。

cardを扱うときは、どのカードを扱うかを知っていなければなりません。そのカードのランクとスーツです。私はあなたがジョーカーカードを扱っていないと思っています。プレイヤーはカード上で何をしたいのかをペイントできますか?

私にとっては、Deckカードも必要です。 giveMeCardメソッドはDeckからカードをランダムに取り出し、デッキから取り出してHandに追加します。恐らくdealはメソッドのより良い名前です。基本ドメイン(カードゲーム)をよりよく反映します。

+0

'super(" s "、" r ")'の例を考え直したいかもしれません。 – Tom

3

私は入力に、コンストラクタにパラメータを持っています。私はこれをしたくありません。

問題を解決するには、が必要です。特定のスーツとランクなし

Card

は無意味です。無意味なオブジェクトをインスタンス化したくない。

あなたは、あなたの理由はそのコンストラクタが期待するパラメータであなたのカードをインスタンス化するために望んでいないためであるかを私たちに語っていないが、あなたの理由があるものは何でも、彼らはおそらく正確に勝つことはできません。

だから、あなたはコンストラクタにスーツとランクを渡す必要があり、あなたはそれがそれらを渡すことができるように取るものは何でもする必要があり、そしてあなただけのこれを行うにはしたくないはずですが、実際にこれをやって大好きです。

関連する問題