0

私は現在、500というカードゲームを実装しようとしています。

ここでは、可能なすべてのタイプの入札を単純なインデックス番号にインデックス付けしようとしています。別のクラスのスーツの列挙型をすでに作成しました。私が今抱えている問題は、エラーが発生し続けることです

「メソッドBid(int、Card.Suit)は、タイプBidに対して未定義です」。

なぜこれが起こっているのか分かりません。どんな助けでもいただければ幸いです。

public Bid(int pTricks, Suit pSuit)
{
    assert pTricks >= 6;
    assert pTricks <= 10;
    this.trickCount = pTricks;
    this.trumpSuit = pSuit;
}


public Bid(int pIndex)
{

    switch (pIndex) {
    case 0: Bid(6, Suit.SPADES);
    case 1: Bid(6, Suit.CLUBS);
    case 2: Bid(6, Suit.DIAMONDS);
    case 3: Bid(6, Suit.HEARTS);
    case 4: Bid(6, null);
    case 5: Bid(7, Suit.SPADES);
    case 6: Bid(7, Suit.CLUBS);
    case 7: Bid(7, Suit.DIAMONDS);
    case 8: Bid(7, Suit.HEARTS);
    case 9: Bid(7, null);
    case 10: Bid(8, Suit.SPADES);
    case 11: Bid(8, Suit.CLUBS);
    case 12: Bid(8, Suit.DIAMONDS);
    case 13: Bid(8, Suit.HEARTS);
    case 14: Bid(8, null);
    case 15: Bid(9, Suit.SPADES);
    case 16: Bid(9, Suit.CLUBS);
    case 17: Bid(9, Suit.DIAMONDS);
    case 18: Bid(9, Suit.HEARTS);
    case 19: Bid(9, null);
    case 20: Bid(10, Suit.SPADES);
    case 21: Bid(10, Suit.CLUBS);
    case 22: Bid(10, Suit.DIAMONDS);
    case 23: Bid(10, Suit.HEARTS);
    case 24: Bid(10, null);

    }


}
4

3 に答える 3

5

thisキーワードを使用して、他のコンストラクターを呼び出します。

例えば

case 24: this(10, Suit.HEARTS); break;

break;また、各ケースの最後に必ず持ってください。

編集:これは、以下のコメントに示されているようには機能しません。このロジックをコンストラクターから呼び出すプライベートメソッドに移動するか、静的ファクトリメソッドを使用して2番目のコンストラクターを置き換えます。

于 2012-09-27T18:59:22.113 に答える
2

静的初期化子を使用します。

public static Bid create(int pIndex) {
    switch (pIndex) {
    case 0: return Bid(6, Suit.SPADES);
    case 1: return Bid(6, Suit.CLUBS);
    ...
}
于 2012-09-27T19:19:26.253 に答える
1
  1. 「メソッドBid(int、Card.Suit)は、タイプBidに対して未定義です」そうです!その署名を持つメソッドはありません-Bid(int、Card.Suit)はコンストラクターです。(アクセス修飾子と名前の間にリターンタイプまたはキーワードvoidがないため、わかります)

  2. 別のコンストラクターからコンストラクターを呼び出すには、クラス名の代わりにキーワードthisを使用します。また、別のコンストラクター(またはスーパーコンストラクター)の呼び出しは最初のステートメントである必要があるため、コーディングしたスイッチは機能しません。

3.静的初期化子を使用して入札単価のマップを作成することをお勧めします。例:(テストされていない):

private static Map<Integer, Bid> bids = new HashMap<Integer, Bid>();

{
    bids.put(0, new Bid(6, Suit.SPADES));
    // ...
}

次に、マップにアクセスします。

public Bid getBidByIndex(int pIndex) {
    return bids.get(pIndex);
}
于 2012-09-27T19:36:46.537 に答える